Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp4240660pxk; Tue, 8 Sep 2020 14:39:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6R1jOj6ou+N7xShbuH1m698/2HDtIFs+sN7KtxYSl+cnyi5OuQGbvDn6g2Lcd3MF7DOib X-Received: by 2002:a17:906:c348:: with SMTP id ci8mr466743ejb.417.1599601142675; Tue, 08 Sep 2020 14:39:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599601142; cv=none; d=google.com; s=arc-20160816; b=bXt5QbNGpIYlICTdAP4mP6eCBpKmEfNJmNVvA1+RNgSp7ACUA2g/qtqJOrF6fqi7K2 Qlsn6+3du6+eA5ErH7dPLnTj0qm0EuzTZhuKlHoeYdKmemHlZRSjMy6Rafiab/Ycxra2 qLAUX+EuECg5d1Vp6mjyHwlFZyCPgoOSNQEYETqRveMOOpOpiKsfK7k4yxCxM7KkMRqv mZRHZYf1B0q+8mnktgO02zVCfnWekvzc2zCHID5YdhqkjQHcvjhKVzG7x5aJMqqA/CcV ybrew1AidQ9+wYzJEynHUomOJQYNqsDW53lqinlfasSMgmMuWOKGAdhdtSL/murWoV4J N35w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=6rlUi8XkwHRuMGj8qjCe5rLCzeZ63xWS26gHzZtyAMk=; b=OXa8e13a4nS8d+VudSl82zhs2qVbvNRY02/hugfcKtDzyB7F6XYhWn3t3pXcTnRqeS +FBGF0nRg5byUVvwNu7Vrn5KSUQ4HMVD/qUDAx2OCXq3jRBbpAY1AxEuRGI2fwlNf5yg 6+yMrVd09plKjye1s1qRStpbNvmodfoQHbDbs/9n+m9ZL000xiI+OfT4UZ3G6g25Yk// 7OvDPDIFWTH43d7n+cv11IuGTtZ1aN0hckqLADv0v8zFuM+ZcpiFKTdL7BLvHF+p3fpo vyWFt/s2ZYanPCTYgDMiJWaWUeC8g49cYnCwKhJy/ICmStDs7xxPWPQ+0b0ooyGLYfr8 4hJA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d20si222086edn.317.2020.09.08.14.38.39; Tue, 08 Sep 2020 14:39:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728443AbgIHVh6 (ORCPT + 99 others); Tue, 8 Sep 2020 17:37:58 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:35399 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726002AbgIHVhz (ORCPT ); Tue, 8 Sep 2020 17:37:55 -0400 Received: from threadripper.lan ([149.172.98.151]) by mrelayeu.kundenserver.de (mreue012 [212.227.15.129]) with ESMTPA (Nemesis) id 1MSZDt-1k8m772Fsf-00Ssj4; Tue, 08 Sep 2020 23:37:20 +0200 From: Arnd Bergmann To: Adaptec OEM Raid Solutions , "James E.J. Bottomley" , "Martin K. Petersen" , Balsundar P Cc: hch@infradead.org, Arnd Bergmann , Zou Wei , Hannes Reinecke , Sagar Biradar , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] scsi: aacraid: improve compat_ioctl handlers Date: Tue, 8 Sep 2020 23:36:21 +0200 Message-Id: <20200908213715.3553098-1-arnd@arndb.de> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K1:KRcdwEjkKj9+XoPTDAYicg3zaMW+8aDN7KFTDFdvtQylHXBrceI 4d8eunLAXcM9jP6dDtH+8xmH6N+5+Ao6vVxs4IdympM60xBQnobDY+FN5htDyO4Z9o/PVTC Svxotml9vbAurjzKdHkv2jkFKiF0mLWpVHpCF5JzIn8pjfrK0QYnzJy/PMMe41SHwCcSM1J mgL0yMlSogNhxz1j5/wsw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:Son/2bucWXE=:OTWFTbHTBU5W/x1+wSmX61 n854zU9YhMAAMMGHbpF+rRAAVaTaxn1hsv1mDzufM8Vv/1e87bT2fyl01TMoyyijVGG/IUSSN C/TRFFWsB9LLcWv11jwHRu8JwC3GSGyQ+HoZ2SMJfQ0IXMzWyCWK+I+wWG28/61dOKaSqDl9C CIjjK2kHy0im1xEZ+zoEH+Tqchj/DEE50sXWU7sAmmM7ao9y6Nk/1ckwc196Uif0Ahk/4xoVm tV73tyRXAezE/lt48vEN1BS8s1LsqP+SlKGFmq7FurWjtexBPF36ktnMxymszfz90J1pYd7Km larvBBPrb8QXfWl6K48iPnXGb9aQsZ2mS56fg0U8ANhsxLdajgpXelYeklp8az5XFiEIiJvhS 04fKPSN81HLvABlkGAppA+VdXY+epXySk2bVkjdv9r4w00EFMWaQI6YFNylTWPfPJktIiti/o 6pmpiIrgLWHUnmvbHvTNlaM7blRU1pXJAhm9wWwkKSqFyTK2VxHWNv6Kj6cxllRk/J8x1jl/O UmF6UGzlRZcvkVS/aLCehAN/L8+JI/i0ISqPWQqclnXWifOC3PQCpN/mkSkoWg6iMdstrW/47 oO424NllNUX+86z4cr2TgHs/rvdQusIdewL3WrIKMmJ2PIHz2uxWOKBpFfZRKggD9sf2ARhwY vnHAdDU0lX9dXVsW+gVfdVSoJNdsnasZFumOdZ/2uZ9pAhqkQJKecYDpuBZxNEKlS56y+d4Ix EwfVKiLlli97rjsMmOq98EFcUyzWd+SGvkQFz2U6O0bS0LLenxbDo39pXCogLCWummQ6ssaJL 0f5BVExDQaaTOOadR5zu/dJicHBqU/CtvPIsnzos7195rZ5x3t4OXrFrKRNs5tvbSmUaP3Y Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The use of compat_alloc_user_space() can be easily replaced by handling compat arguments in the regular handler, and this will make it work for big-endian kernels as well, which at the moment get an invalid indirect pointer argument. Calling aac_ioctl() instead of aac_compat_do_ioctl() means the compat and native code paths behave the same way again, which they stopped when the adapter health check was added only in the native function. Fixes: 572ee53a9bad ("scsi: aacraid: check adapter health") Signed-off-by: Arnd Bergmann --- drivers/scsi/aacraid/commctrl.c | 20 +++++++++-- drivers/scsi/aacraid/linit.c | 61 ++------------------------------- 2 files changed, 20 insertions(+), 61 deletions(-) diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index 59e82a832042..6d6f72d68164 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c @@ -25,6 +25,7 @@ #include #include #include +#include #include /* ssleep prototype */ #include #include @@ -243,8 +244,23 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg) struct list_head * entry; unsigned long flags; - if(copy_from_user((void *)&f, arg, sizeof(struct fib_ioctl))) - return -EFAULT; + if (in_compat_syscall()) { + struct compat_fib_ioctl { + u32 fibctx; + s32 wait; + compat_uptr_t fib; + } cf; + + if (copy_from_user(&f, arg, sizeof(struct compat_fib_ioctl))) + return -EFAULT; + + f.fibctx = cf.fibctx; + f.wait = cf.wait; + f.fib = compat_ptr(cf.fib); + } else { + if (copy_from_user(&f, arg, sizeof(struct fib_ioctl))) + return -EFAULT; + } /* * Verify that the HANDLE passed in was a valid AdapterFibContext * diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 8588da0a0655..8c0f55845138 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -1182,63 +1182,6 @@ static long aac_cfg_ioctl(struct file *file, return aac_do_ioctl(aac, cmd, (void __user *)arg); } -#ifdef CONFIG_COMPAT -static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long arg) -{ - long ret; - switch (cmd) { - case FSACTL_MINIPORT_REV_CHECK: - case FSACTL_SENDFIB: - case FSACTL_OPEN_GET_ADAPTER_FIB: - case FSACTL_CLOSE_GET_ADAPTER_FIB: - case FSACTL_SEND_RAW_SRB: - case FSACTL_GET_PCI_INFO: - case FSACTL_QUERY_DISK: - case FSACTL_DELETE_DISK: - case FSACTL_FORCE_DELETE_DISK: - case FSACTL_GET_CONTAINERS: - case FSACTL_SEND_LARGE_FIB: - ret = aac_do_ioctl(dev, cmd, (void __user *)arg); - break; - - case FSACTL_GET_NEXT_ADAPTER_FIB: { - struct fib_ioctl __user *f; - - f = compat_alloc_user_space(sizeof(*f)); - ret = 0; - if (clear_user(f, sizeof(*f))) - ret = -EFAULT; - if (copy_in_user(f, (void __user *)arg, sizeof(struct fib_ioctl) - sizeof(u32))) - ret = -EFAULT; - if (!ret) - ret = aac_do_ioctl(dev, cmd, f); - break; - } - - default: - ret = -ENOIOCTLCMD; - break; - } - return ret; -} - -static int aac_compat_ioctl(struct scsi_device *sdev, unsigned int cmd, - void __user *arg) -{ - struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata; - if (!capable(CAP_SYS_RAWIO)) - return -EPERM; - return aac_compat_do_ioctl(dev, cmd, (unsigned long)arg); -} - -static long aac_compat_cfg_ioctl(struct file *file, unsigned cmd, unsigned long arg) -{ - if (!capable(CAP_SYS_RAWIO)) - return -EPERM; - return aac_compat_do_ioctl(file->private_data, cmd, arg); -} -#endif - static ssize_t aac_show_model(struct device *device, struct device_attribute *attr, char *buf) { @@ -1523,7 +1466,7 @@ static const struct file_operations aac_cfg_fops = { .owner = THIS_MODULE, .unlocked_ioctl = aac_cfg_ioctl, #ifdef CONFIG_COMPAT - .compat_ioctl = aac_compat_cfg_ioctl, + .compat_ioctl = aac_cfg_ioctl, #endif .open = aac_cfg_open, .llseek = noop_llseek, @@ -1536,7 +1479,7 @@ static struct scsi_host_template aac_driver_template = { .info = aac_info, .ioctl = aac_ioctl, #ifdef CONFIG_COMPAT - .compat_ioctl = aac_compat_ioctl, + .compat_ioctl = aac_ioctl, #endif .queuecommand = aac_queuecommand, .bios_param = aac_biosparm, -- 2.27.0