Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751271AbdGMCU5 (ORCPT ); Wed, 12 Jul 2017 22:20:57 -0400 Received: from regular1.263xmail.com ([211.150.99.131]:49562 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751061AbdGMCUz (ORCPT ); Wed, 12 Jul 2017 22:20:55 -0400 X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-RL-SENDER: jeffy.chen@rock-chips.com X-FST-TO: jeffy.chen@rock-chips.com X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: jeffy.chen@rock-chips.com X-UNIQUE-TAG: <11f6c84818969ee4776fcef73a6bbe72> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Message-ID: <5966D8E4.3050907@rock-chips.com> Date: Thu, 13 Jul 2017 10:20:20 +0800 From: jeffy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20130126 Thunderbird/19.0 MIME-Version: 1.0 To: Jeffy Chen , linux-kernel@vger.kernel.org CC: briannorris@chromium.org, dianders@chromium.org, Daniel Vetter , Jani Nikula , dri-devel@lists.freedesktop.org, David Airlie , Sean Paul Subject: Re: drm: Add missing field copy in compat_drm_version References: <1499840312-23418-1-git-send-email-jeffy.chen@rock-chips.com> In-Reply-To: <1499840312-23418-1-git-send-email-jeffy.chen@rock-chips.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1721 Lines: 53 Hi guys, i was testing this on arm64 base chromeos(with arm32 userspace). and the libdrm crashed: drmVersionPtr drmGetVersion(int fd) { ... memclear(*version); if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) { ... if (version->name_len) version->name = drmMalloc(version->name_len + 1); <-- rely on the lengths updated by kernel if (version->date_len) version->date = drmMalloc(version->date_len + 1); if (version->desc_len) version->desc = drmMalloc(version->desc_len + 1); ... if (version->name_len) version->name[version->name_len] = '\0'; <-- crashed here, since the name_len would always be zero, so version->name would be nullptr. On 07/12/2017 02:18 PM, Jeffy Chen wrote: > DRM_IOCTL_VERSION is supposed to update the name_len/date_len/desc_len > fields to user. > > Fixes: 012c6741c6aa("switch compat_drm_version() to drm_ioctl_kernel()") > Signed-off-by: Jeffy Chen > --- > > drivers/gpu/drm/drm_ioc32.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c > index 94acf51..2789356 100644 > --- a/drivers/gpu/drm/drm_ioc32.c > +++ b/drivers/gpu/drm/drm_ioc32.c > @@ -112,6 +112,9 @@ static int compat_drm_version(struct file *file, unsigned int cmd, > v32.version_major = v.version_major; > v32.version_minor = v.version_minor; > v32.version_patchlevel = v.version_patchlevel; > + v32.name_len = v.name_len; > + v32.date_len = v.date_len; > + v32.desc_len = v.desc_len; > if (copy_to_user((void __user *)arg, &v32, sizeof(v32))) > return -EFAULT; > return 0; > >