Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp179909imm; Wed, 22 Aug 2018 02:11:33 -0700 (PDT) X-Google-Smtp-Source: AA+uWPyF4gDqVzkfd04IEAEUlTQ9BuxRDa9Ld3WSOATvceZs/ilbEbPuPkJdOX39YSEWUvHhA6Pp X-Received: by 2002:a63:a619:: with SMTP id t25-v6mr49887398pge.288.1534929093857; Wed, 22 Aug 2018 02:11:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534929093; cv=none; d=google.com; s=arc-20160816; b=oO0xFM5nsaG+ZV17btbac1itm46X/3ZGykmLTqAATsuSo1fQs1zEDoRqwD2+gGUHs1 I8dto0jwRAesLABAEahP0233yCPOXUCA/QyBP0acQa6Y1IE0qNLDG8jMonC9DlRgxy7f ob1vLQscPzREu7c7W6ac63CVYDylsenwVKlHXpJLmopWxhPoX7XHG71hkYC99XcYrhtF L/qMwlJXDsszVD6ztB9YU3iim4FSOF/0B522lAmGQurWqQqRx+4DDQ1xzlan3e0nsQjE n9CXR75/lQnHXl2e34PMDtYzYO3Y5dEOJJOjj6o37FJj1iFmqI+Qinji9YlBCNZikhjv 0duQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=z4YaKXzJ/DownRwu4yv1jXZW8lTAGwrCMpU9ehgypc4=; b=rCa7+j1kOSJON1HSJ26uDBwp9oAPxGqVKSWuJSj7Z7rkZFLc43QQ6YLw2gC5+W87Jz y2768Ms4gxjKKB/5gSQbl0SQ/7NDry72nMUr9JrPiET9RGoe2hmP/Uobjvl05qWNxkBL zA4qa4+ST/1CtjWsdKzHao81QtpwwJT9sWIOqmwfA9p6CXUd8RKwFpbjY0yQ4rBbtIfq eCfFARtqgEjg3//QKuM8ORxA7fDQSnatvlZAbizntQGsOLXDO4YlU2Cfipf6re3xVIIy iQ+AV+xaK8VREgn7BIkrMdTJAk2wx92ZSG1912HBLW5RCe016ZZbnkZiZdxp5tdeYVJz Edtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=d76XWmxN; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c187-v6si1224653pga.378.2018.08.22.02.11.18; Wed, 22 Aug 2018 02:11:33 -0700 (PDT) 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=@ffwll.ch header.s=google header.b=d76XWmxN; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728553AbeHVMS1 (ORCPT + 99 others); Wed, 22 Aug 2018 08:18:27 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:44534 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728552AbeHVMSP (ORCPT ); Wed, 22 Aug 2018 08:18:15 -0400 Received: by mail-ed1-f66.google.com with SMTP id s10-v6so883658edb.11 for ; Wed, 22 Aug 2018 01:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=z4YaKXzJ/DownRwu4yv1jXZW8lTAGwrCMpU9ehgypc4=; b=d76XWmxNBPKF2ilzx595VNc8Fb69toGGSwPhmi4orJx6Q32PdRq9eRDWJ5NY5SUIoW lXizKQdmV06CqSvFYDg1Z9MLrgb2fgfPTONZ4mBOPbFvacepXNzPVf5S2ZTf5vsjcaLo zYy2OyMB5XIjbzysXPjq7BLXFE4r241d7PD/Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=z4YaKXzJ/DownRwu4yv1jXZW8lTAGwrCMpU9ehgypc4=; b=TZUg3JwJ4nefFAkJUi0qhb+wKodPwP4ZprA9HKwGCzuTuy+sJwDYKMEGo0XgLWv2Nu iMLdfedjsk5jhTwd1s4qZSyKN5xjzVBnTsAyAT11fwWSHrHym/uO2yfvHMAa8N5jQAFr IZd5Ij2l+F17XQhm6UDqSk/Noer7VLwvSVF0fWPThS9qFtVqOdcGCQyV96Hn5w17XaBw G+qs5EQZzjdKBY9l7nRRYx3jjJ1BOewKd4gbmdEfpVclCkpwD6MOJvoNv6qNV6pCQlyc Hazor/3o9sBpigKTEJOEa0SjuG9r5y02JnOvvb9mwzACQTrPYxr3drovyiktUGKKctJF vdxg== X-Gm-Message-State: AOUpUlGPWbPzBIAQ+ZKNVDL2UucmjlPoC/8UTUrFscPHytzQcpCzndgx X9b68HzY6kQATPicKqmZMghbog== X-Received: by 2002:a50:b8c5:: with SMTP id l63-v6mr64588855ede.80.1534928056364; Wed, 22 Aug 2018 01:54:16 -0700 (PDT) Received: from phenom.ffwll.local (212-51-149-109.fiber7.init7.net. [212.51.149.109]) by smtp.gmail.com with ESMTPSA id r21-v6sm636418eds.7.2018.08.22.01.54.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Aug 2018 01:54:15 -0700 (PDT) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , LKML , Daniel Vetter , Bartlomiej Zolnierkiewicz , Kees Cook , linux-fbdev@vger.kernel.org, Daniel Vetter Subject: [PATCH 3/4] fbdev: Add FBINFO_HIDE_SMEM_START flag Date: Wed, 22 Aug 2018 10:54:04 +0200 Message-Id: <20180822085405.10787-3-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180822085405.10787-1-daniel.vetter@ffwll.ch> References: <20180822085405.10787-1-daniel.vetter@ffwll.ch> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DRM drivers really, really, really don't want random userspace to share buffer behind it's back, bypassing the dma-buf buffer sharing machanism. For that reason we've ruthlessly rejected any IOCTL exposing the physical address of any graphics buffer. Unfortunately fbdev comes with that built-in. We could just set smem_start to 0, but that means we'd have to hand-roll our own fb_mmap implementation. For good reasons many drivers do that, but smem_start/length is still super convenient. Hence instead just stop the leak in the ioctl, to keep fb mmap working as-is. A second patch will set this flag for all drm drivers. Cc: Bartlomiej Zolnierkiewicz Cc: Kees Cook Cc: Daniel Vetter Cc: linux-fbdev@vger.kernel.org Signed-off-by: Daniel Vetter --- drivers/video/fbdev/core/fbmem.c | 4 ++++ include/linux/fb.h | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 609438d2465b..549d0f86fcf3 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -1116,6 +1116,8 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, if (!lock_fb_info(info)) return -ENODEV; fix = info->fix; + if (info->flags & FBINFO_HIDE_SMEM_START) + fix.smem_start = 0; unlock_fb_info(info); ret = copy_to_user(argp, &fix, sizeof(fix)) ? -EFAULT : 0; @@ -1326,6 +1328,8 @@ static int fb_get_fscreeninfo(struct fb_info *info, unsigned int cmd, if (!lock_fb_info(info)) return -ENODEV; fix = info->fix; + if (info->flags & FBINFO_HIDE_SMEM_START) + fix.smem_start = 0; unlock_fb_info(info); return do_fscreeninfo_to_user(&fix, compat_ptr(arg)); } diff --git a/include/linux/fb.h b/include/linux/fb.h index fa8c6f9c9c3a..f42b09ca71f8 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -456,6 +456,13 @@ struct fb_tile_ops { * and host endianness. Drivers should not use this flag. */ #define FBINFO_BE_MATH 0x100000 +/* + * Hide smem_start in the FBIOGET_FSCREENINFO IOCTL. This is used by modern DRM + * drivers to stop userspace from trying to share buffers behind the kernel's + * back. Instead dma-buf based buffer sharing should be used. + */ +#define FBINFO_HIDE_SMEM_START 0x200000 + struct fb_info { atomic_t count; -- 2.18.0