Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp195052imm; Thu, 6 Sep 2018 00:31:07 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYq/C9sFz9wHFJBMO6lwee2t/PYh/FY6dCdCOcs9ags8cl+XrMy49COhnWZRY0oDoZtc0ZA X-Received: by 2002:a65:5581:: with SMTP id j1-v6mr1401589pgs.203.1536219067376; Thu, 06 Sep 2018 00:31:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536219067; cv=none; d=google.com; s=arc-20160816; b=QBzTJu2+Soako1ofgMNcE2B2YLOQF0u55o/KJ8ErOBhHtzykRR2wWBwZqzjYZ0Ksv7 EnVimBxaZuu51vtKS9jPuAFegrpbGoGk6wjs6H2rfY/335oH3+UdsfzPgC6zh9RCsvc5 K+1Xe1sSArCHrYTqODdXk5mTjMflY1DlrVSn1U75Zsb+4if7+jWR+AsYq7u3sBgL1FSD oHvyBe/x1+f41zzphpOWQyXnP/dFSHncGpx5PW5rs7ZslP05NsnKjMwCdcn2NQB6NYbY 5mEvg+a+YueivIaa/lPMUWatQgBADUovB5n/hUUMuOUdBuOoBgDrAsYMWtuh1xd8RtwI UkfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=D2suv0ap+tanm7yHk81RAwZ0rHCV/LFK/SWDo49Y+Gk=; b=EFl2EXBlExabRq5OfjGViGII4wiOtNa0V7HzbAtMBNqduxBIeq3AL475onRwaNI6n9 6NiWHV1yvo4ave0h9fCbFuZ1D51BUrmmg+tVPYOIBxY5d06+u6FYcwTPziapy5S9uNK8 CHSPq7iOufLmrEYhGhIeANzjsU11WPUSSqFaF6Wv74PFTUlgQBN2ahApO83Mtev4qT7+ WPVj+acFgBxy/Ym93KNiRolCqHl5zmyyIysqVVewo8iFZzTOyb5jB4/8RF/U5w8ybqRq 7EGoQ9XbF7C3aWuanouu9pj1MPxKhb4qMBCPkS1IjKdTP5ERfMqa5BfHfzubZvwT+9kE /9Sw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z5-v6si3045065pgf.488.2018.09.06.00.30.50; Thu, 06 Sep 2018 00:31:07 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727835AbeIFMDG (ORCPT + 99 others); Thu, 6 Sep 2018 08:03:06 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:53286 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725929AbeIFMDG (ORCPT ); Thu, 6 Sep 2018 08:03:06 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 107B68780F; Thu, 6 Sep 2018 07:29:01 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-66.ams2.redhat.com [10.36.116.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0BD5BED145; Thu, 6 Sep 2018 07:28:58 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 3D0234F268; Thu, 6 Sep 2018 09:28:57 +0200 (CEST) From: Gerd Hoffmann To: dri-devel@lists.freedesktop.org Cc: Gerd Hoffmann , Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] drm: refuse ADDFB2 ioctl for broken bigendian drivers Date: Thu, 6 Sep 2018 09:28:50 +0200 Message-Id: <20180906072850.11150-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Thu, 06 Sep 2018 07:29:01 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Thu, 06 Sep 2018 07:29:01 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'kraxel@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Drivers must set the quirk_addfb_prefer_host_byte_order quirk to make the drm_mode_addfb() compat code work correctly on bigendian machines. If they don't they interpret pixel_format values incorrectly for bug compatibility, which in turn implies the ADDFB2 ioctl does not work correctly then. So block it to make userspace fallback to ADDFB. Signed-off-by: Gerd Hoffmann --- drivers/gpu/drm/drm_ioctl.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index ea10e9a26a..08e48bda23 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -469,6 +469,29 @@ static int drm_copy_field(char __user *buf, size_t *buf_len, const char *value) return 0; } +static int drm_mode_addfb2_check(struct drm_device *dev, + void *data, struct drm_file *file_priv) +{ +#ifdef __BIG_ENDIAN + if (!dev->mode_config.quirk_addfb_prefer_host_byte_order) { + /* + * Drivers must set the + * quirk_addfb_prefer_host_byte_order quirk to make + * the drm_mode_addfb() compat code work correctly on + * bigendian machines. + * + * If they don't they interpret pixel_format values + * incorrectly for bug compatibility, which in turn + * implies the ADDFB2 ioctl does not work correctly + * then. So block it to make userspace fallback to + * ADDFB. + */ + return -EINVAL; + } +#endif + return drm_mode_addfb2(dev, data, file_priv); +} + /* * Get version information * @@ -645,7 +668,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb_ioctl, DRM_UNLOCKED), - DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2, drm_mode_addfb2, DRM_UNLOCKED), + DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2, drm_mode_addfb2_check, DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_UNLOCKED), -- 2.9.3