Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp622538ybl; Fri, 24 Jan 2020 06:36:28 -0800 (PST) X-Google-Smtp-Source: APXvYqzbmCaQIo/hUlpeGVVWTZHrlHOYFuQ+f0Zi5nCF4wtuQIIL7ZkVUh+52+Jq/oMB7ljIA9Tj X-Received: by 2002:a05:6808:658:: with SMTP id z24mr2250593oih.91.1579876588211; Fri, 24 Jan 2020 06:36:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579876588; cv=none; d=google.com; s=arc-20160816; b=qDtYSzzzUG9MWn3eiBAwH3xMlKA+G98QGkDdbcm4reKoix+u2W8jMChHPluXIT7dOh LIqmyCsnnLHhgkOteVU6SbGwAkDmuwekcbmOeZbCrukLz5G3in2egPxSTvVvvLDuEe/L UApk4GD0ZLhcGCJlSnENvh6xJvsAUFJnYnVhdrwhOzIl72Ay7RTuxDDJPlkfdla0QxI5 fVjU03egKfLoIIey2XGQqmZF3af9VhYg3qjbM09uYADzhlmZvwHXH8EvNYnNvoHgFldO L1u0+S5B7qU3g9i5c2R9bWXqI8sopZtwQQJ04LroEQaaKzAshVu0Wv2ijv6cCQ0+2sk8 B2MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=znYwEP8BlT5JhAqIxI23u4NVyVYxwHFg1esi8lZ0b3I=; b=iIpbafFN/+2fTLP+CBf0iObl+fL2Vav5lRw8vBzm0DQE4QLJskD1MUkpHbQ4tO2kMO ytoysMHqfE+jsWKYr2/2Z5UZbGqrFksRAnyczoGTwEYBmori4aI1ZzsyvVA/mPQONbif tZUydOMHRpLoAtpH8MrC50e8NZ7+SZFyBP0zR+0grxi6geEeLgOmGRj6A4bUxOEeEDu+ GmKHx3v6V7KUdloYt1HLEkAlGHnjxtoLXekuAen5OmgApZ3XKt1v3FxXIRBAhBC/z8iw b0POWI2TlYeFYzAtjSHdm6lv5M8iwLfzT00ERtIZMT3Q9ZjiigbYlC7+dLoDuCp2YWSl /6Nw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=fdaKR2SL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i6si3085994otp.5.2020.01.24.06.36.16; Fri, 24 Jan 2020 06:36:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=fdaKR2SL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733084AbgAXMlS (ORCPT + 99 others); Fri, 24 Jan 2020 07:41:18 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:34695 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729774AbgAXMlS (ORCPT ); Fri, 24 Jan 2020 07:41:18 -0500 Received: by mail-pf1-f195.google.com with SMTP id i6so1058855pfc.1 for ; Fri, 24 Jan 2020 04:41:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=znYwEP8BlT5JhAqIxI23u4NVyVYxwHFg1esi8lZ0b3I=; b=fdaKR2SLA5vNu+qBklTanXoToNYa6WgLoP22kqdCYdS3CvCCGl1MaVzdq0R/BSs/Gj +NdsCcir6+RhE8r/7nww9QwERmL3s4rZ+WLCzKKVmB2emp2sh87RyRYw9QTsZRjBrEj5 fwIYq3k9B/WqoYYcPn8Az9gEH6fvU1QNAURlf0liOeGr8kYXPrv98mUy7Q6zkp0YbV8d iTXcsRobQxfsjrr5E3e+V+cr/dGnyK0pNyvGisNxKxyG1iNq9hICQBNiuivcYMojTEIJ FsO+YzEXggI8E48jcAzSpNQm33LvsIjgMYaSW93GqEapvqnmBY/Ac6jGcXjoVhhMyl4V VzOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=znYwEP8BlT5JhAqIxI23u4NVyVYxwHFg1esi8lZ0b3I=; b=JITqXVW5wcsDoETwsCTHnIt/6wVauSNggo21jKgvE7q29iMGfLoj0k+l4u7L0tDyiL 6nfxCGLnxsOr9SSJ+PyT9T3ThELwID5K8nb2T44qrgC86Goikzx3AXj+vD7uuvYU/alI 43lbkkP9WrL2vXwMe1PckKzJrP5P/pSG5XepFl1nzI7bcZw74kfNPrJISivFTqe91ByO LsonOmZm7qQF8v04ntNP6eErb27T61zoZ0d6Dfp/B1xc70bVVBl97+67YqBirg5d9z4w hkTsCemx8Gx/3vJk6aTMmAQpCOIum2V8ZwxpLUByMkVWp9XZbLUGbrR7m4S2sSi23KOM zFtQ== X-Gm-Message-State: APjAAAXGuZQ+W8WnFuyOPKHwWdoTDofhZznNKqbakJYjxnK92eUGkaDh AEwjJgIx5CI7NvPjZtYbbdrw0kk06Q5jqX4wQ1FKFQ== X-Received: by 2002:a63:358a:: with SMTP id c132mr4045045pga.286.1579869677153; Fri, 24 Jan 2020 04:41:17 -0800 (PST) MIME-Version: 1.0 References: <000000000000de50d7059ba6acd5@google.com> <20200123102707.2596-1-hdanton@sina.com> <20200124022847.11244-1-hdanton@sina.com> In-Reply-To: <20200124022847.11244-1-hdanton@sina.com> From: Andrey Konovalov Date: Fri, 24 Jan 2020 13:41:05 +0100 Message-ID: Subject: Re: KASAN: use-after-free Read in v4l2_release (3) To: Hillf Danton Cc: Laurent Pinchart , syzbot , bnvandana@gmail.com, hverkuil-cisco@xs4all.nl, LKML , linux-media@vger.kernel.org, USB list , Mauro Carvalho Chehab , syzkaller-bugs , Hans Verkuil Content-Type: multipart/mixed; boundary="000000000000e671c4059ce2127a" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --000000000000e671c4059ce2127a Content-Type: text/plain; charset="UTF-8" On Fri, Jan 24, 2020 at 3:29 AM Hillf Danton wrote: > > > On Thu, 23 Jan 2020 14:19:47 +0200 Laurent Pinchart wrote: > > On Thu, Jan 23, 2020 at 06:27:07PM +0800, Hillf Danton wrote: > > > Wed, 22 Jan 2020 14:58:08 -0800 (PST) > > > > syzbot has found a reproducer for the following crash on: > > > > > > > > HEAD commit: 4cc301ee usb: gadget: add raw-gadget interface > > > > git tree: https://github.com/google/kasan.git usb-fuzzer > > > > console output: https://syzkaller.appspot.com/x/log.txt?x=17f5a721e00000 > > > > kernel config: https://syzkaller.appspot.com/x/.config?x=9ba75825443d54bd > > > > dashboard link: https://syzkaller.appspot.com/bug?extid=75287f75e2fedd69d680 > > > > compiler: gcc (GCC) 9.0.0 20181231 (experimental) > > > > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=16a0b6f1e00000 > > > > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1327dd76e00000 > > > > > > > > IMPORTANT: if you fix the bug, please add the following tag to the commit: > > > > Reported-by: syzbot+75287f75e2fedd69d680@syzkaller.appspotmail.com > > > > > > > > usbvision_set_audio: can't write iopin register for audio switching > > > > usbvision_radio_close: Final disconnect > > > > ================================================================== > > > > BUG: KASAN: use-after-free in v4l2_release+0x2f1/0x390 drivers/media/v4l2-core/v4l2-dev.c:459 > > > > Read of size 4 at addr ffff8881caba1068 by task v4l_id/1913 > > > > > > Add the release callback for usbvision video device and use it to release > > > resources when the last reference to the device goes away. > > > > Would you be able to submit this with a commit message and your > > Signed-off-by line ? > > ---8<--- > Subject: [PATCH] media: usbvision: add the release callback for video device > From: Hillf Danton > > To fix the UAF syzbot reported, > > BUG: KASAN: use-after-free in v4l2_release+0x2f1/0x390 drivers/media/v4l2-core/v4l2-dev.c:459 > > a release cb which is a simple wrapper of usbvision_release() is added > for releasing resources as the last reference to the usbvision video > device goes away. > > Reported-by: syzbot > Fixes: 2aa689dd8057 ("[media] usbvision: embed video_device") > Cc: Hans Verkuil > Signed-off-by: Hillf Danton > --- > > --- a/drivers/media/usb/usbvision/usbvision-video.c > +++ b/drivers/media/usb/usbvision/usbvision-video.c > @@ -401,7 +401,6 @@ static int usbvision_v4l2_close(struct f > > if (r) { > printk(KERN_INFO "%s: Final disconnect\n", __func__); > - usbvision_release(usbvision); > return 0; > } > > @@ -409,6 +408,11 @@ static int usbvision_v4l2_close(struct f > return v4l2_fh_release(file); > } > > +static void usbvision_video_device_release(struct video_device *vdev) > +{ > + struct usb_usbvision *usbvision = video_get_drvdata(vdev); > + usbvision_release(usbvision); > +} > > /* > * usbvision_ioctl() > @@ -1181,7 +1185,7 @@ static struct video_device usbvision_vid > .fops = &usbvision_fops, > .ioctl_ops = &usbvision_ioctl_ops, > .name = "usbvision-video", > - .release = video_device_release_empty, > + .release = usbvision_video_device_release, > .tvnorms = USBVISION_NORMS, > }; > > --- a/drivers/media/v4l2-core/v4l2-dev.c > +++ b/drivers/media/v4l2-core/v4l2-dev.c > @@ -206,7 +206,10 @@ static void v4l2_device_release(struct d > } > #endif > > - /* Do not call v4l2_device_put if there is no release callback set. > + /* > + * Decrease v4l2_device refcount > + * > + * Do not call v4l2_device_put if there is no release callback set. > * Drivers that have no v4l2_device release callback might free the > * v4l2_dev instance in the video_device release callback below, so we > * must perform this check here. > @@ -214,16 +217,12 @@ static void v4l2_device_release(struct d > * TODO: In the long run all drivers that use v4l2_device should use the > * v4l2_device release callback. This check will then be unnecessary. > */ > - if (v4l2_dev->release == NULL) > - v4l2_dev = NULL; > + if (v4l2_dev->release) > + v4l2_device_put(v4l2_dev); > > /* Release video_device and perform other > cleanups as needed. */ > vdev->release(vdev); > - > - /* Decrease v4l2_device refcount */ > - if (v4l2_dev) > - v4l2_device_put(v4l2_dev); > } > > static struct class video_class = { > -- #syz test: https://github.com/google/kasan.git ae179410 --000000000000e671c4059ce2127a Content-Type: application/x-patch; name="usbvision.patch" Content-Disposition: attachment; filename="usbvision.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k5s5l7xp0 U3ViamVjdDogW1BBVENIXSBtZWRpYTogdXNidmlzaW9uOiBhZGQgdGhlIHJlbGVhc2UgY2FsbGJh Y2sgZm9yIHZpZGVvIGRldmljZQpGcm9tOiBIaWxsZiBEYW50b24gPGhkYW50b25Ac2luYS5jb20+ CgpUbyBmaXggdGhlIFVBRiBzeXpib3QgcmVwb3J0ZWQsCgpCVUc6IEtBU0FOOiB1c2UtYWZ0ZXIt ZnJlZSBpbiB2NGwyX3JlbGVhc2UrMHgyZjEvMHgzOTAgZHJpdmVycy9tZWRpYS92NGwyLWNvcmUv djRsMi1kZXYuYzo0NTkKCmEgcmVsZWFzZSBjYiB3aGljaCBpcyBhIHNpbXBsZSB3cmFwcGVyIG9m IHVzYnZpc2lvbl9yZWxlYXNlKCkgaXMgYWRkZWQKZm9yIHJlbGVhc2luZyByZXNvdXJjZXMgYXMg dGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSB1c2J2aXNpb24gdmlkZW8KZGV2aWNlIGdvZXMgYXdh eS4KClJlcG9ydGVkLWJ5OiBzeXpib3QgPHN5emJvdCs3NTI4N2Y3NWUyZmVkZDY5ZDY4MEBzeXpr YWxsZXIuYXBwc3BvdG1haWwuY29tPgpGaXhlczogMmFhNjg5ZGQ4MDU3ICgiW21lZGlhXSB1c2J2 aXNpb246IGVtYmVkIHZpZGVvX2RldmljZSIpCkNjOiBIYW5zIFZlcmt1aWwgPGhhbnMudmVya3Vp bEBjaXNjby5jb20+ClNpZ25lZC1vZmYtYnk6IEhpbGxmIERhbnRvbiA8aGRhbnRvbkBzaW5hLmNv bT4KLS0tCgotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVv LmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBA IC00MDEsNyArNDAxLDYgQEAgc3RhdGljIGludCB1c2J2aXNpb25fdjRsMl9jbG9zZShzdHJ1Y3Qg ZgogCiAJaWYgKHIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpbmFsIGRpc2Nvbm5lY3Rc biIsIF9fZnVuY19fKTsKLQkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKIAkJcmV0dXJu IDA7CiAJfQogCkBAIC00MDksNiArNDA4LDExIEBAIHN0YXRpYyBpbnQgdXNidmlzaW9uX3Y0bDJf Y2xvc2Uoc3RydWN0IGYKIAlyZXR1cm4gdjRsMl9maF9yZWxlYXNlKGZpbGUpOwogfQogCitzdGF0 aWMgdm9pZCB1c2J2aXNpb25fdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2Rldmlj ZSAqdmRldikKK3sKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZ2V0 X2RydmRhdGEodmRldik7CisJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKK30KIAogLyoK ICAqIHVzYnZpc2lvbl9pb2N0bCgpCkBAIC0xMTgxLDcgKzExODUsNyBAQCBzdGF0aWMgc3RydWN0 IHZpZGVvX2RldmljZSB1c2J2aXNpb25fdmlkCiAJLmZvcHMJCT0gJnVzYnZpc2lvbl9mb3BzLAog CS5pb2N0bF9vcHMJPSAmdXNidmlzaW9uX2lvY3RsX29wcywKIAkubmFtZSAgICAgICAgICAgPSAi dXNidmlzaW9uLXZpZGVvIiwKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5 LAorCS5yZWxlYXNlCT0gdXNidmlzaW9uX3ZpZGVvX2RldmljZV9yZWxlYXNlLAogCS50dm5vcm1z ICAgICAgICA9IFVTQlZJU0lPTl9OT1JNUywKIH07CiAKLS0tIGEvZHJpdmVycy9tZWRpYS92NGwy LWNvcmUvdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWRldi5j CkBAIC0yMDYsNyArMjA2LDEwIEBAIHN0YXRpYyB2b2lkIHY0bDJfZGV2aWNlX3JlbGVhc2Uoc3Ry dWN0IGQKIAl9CiAjZW5kaWYKIAotCS8qIERvIG5vdCBjYWxsIHY0bDJfZGV2aWNlX3B1dCBpZiB0 aGVyZSBpcyBubyByZWxlYXNlIGNhbGxiYWNrIHNldC4KKwkvKgorCSAqIERlY3JlYXNlIHY0bDJf ZGV2aWNlIHJlZmNvdW50CisJICoKKwkgKiBEbyBub3QgY2FsbCB2NGwyX2RldmljZV9wdXQgaWYg dGhlcmUgaXMgbm8gcmVsZWFzZSBjYWxsYmFjayBzZXQuCiAJICogRHJpdmVycyB0aGF0IGhhdmUg bm8gdjRsMl9kZXZpY2UgcmVsZWFzZSBjYWxsYmFjayBtaWdodCBmcmVlIHRoZQogCSAqIHY0bDJf ZGV2IGluc3RhbmNlIGluIHRoZSB2aWRlb19kZXZpY2UgcmVsZWFzZSBjYWxsYmFjayBiZWxvdywg c28gd2UKIAkgKiBtdXN0IHBlcmZvcm0gdGhpcyBjaGVjayBoZXJlLgpAQCAtMjE0LDE2ICsyMTcs MTIgQEAgc3RhdGljIHZvaWQgdjRsMl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZAogCSAqIFRPRE86 IEluIHRoZSBsb25nIHJ1biBhbGwgZHJpdmVycyB0aGF0IHVzZSB2NGwyX2RldmljZSBzaG91bGQg dXNlIHRoZQogCSAqIHY0bDJfZGV2aWNlIHJlbGVhc2UgY2FsbGJhY2suIFRoaXMgY2hlY2sgd2ls bCB0aGVuIGJlIHVubmVjZXNzYXJ5LgogCSAqLwotCWlmICh2NGwyX2Rldi0+cmVsZWFzZSA9PSBO VUxMKQotCQl2NGwyX2RldiA9IE5VTEw7CisJaWYgKHY0bDJfZGV2LT5yZWxlYXNlKQorCQl2NGwy X2RldmljZV9wdXQodjRsMl9kZXYpOwogCiAJLyogUmVsZWFzZSB2aWRlb19kZXZpY2UgYW5kIHBl cmZvcm0gb3RoZXIKIAkgICBjbGVhbnVwcyBhcyBuZWVkZWQuICovCiAJdmRldi0+cmVsZWFzZSh2 ZGV2KTsKLQotCS8qIERlY3JlYXNlIHY0bDJfZGV2aWNlIHJlZmNvdW50ICovCi0JaWYgKHY0bDJf ZGV2KQotCQl2NGwyX2RldmljZV9wdXQodjRsMl9kZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGNs YXNzIHZpZGVvX2NsYXNzID0gewo= --000000000000e671c4059ce2127a--