From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757234Ab3BFPQX (ORCPT ); Wed, 6 Feb 2013 10:16:23 -0500 Received: from mail-ve0-f170.google.com ([209.85.128.170]:56683 "EHLO mail-ve0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757088Ab3BFPQQ (ORCPT ); Wed, 6 Feb 2013 10:16:16 -0500 From: Paolo Bonzini To: linux-kernel@vger.kernel.org Cc: Tejun Heo , FUJITA Tomonori , Doug Gilbert , "James E.J. Bottomley" , linux-scsi@vger.kernel.org, Jens Axboe Subject: [PATCH v2 01/14] sg_io: pass request_queue to blk_verify_command Date: Wed, 6 Feb 2013 16:15:48 +0100 Message-Id: <1360163761-8541-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1 In-Reply-To: <1360163761-8541-1-git-send-email-pbonzini@redhat.com> References: <1360163761-8541-1-git-send-email-pbonzini@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Adjust the blk_verify_command function to let it look at per-queue data. This will be done in the next patch. Acked-by: Tejun Heo Cc: FUJITA Tomonori Cc: Doug Gilbert Cc: "James E.J. Bottomley" Cc: linux-scsi@vger.kernel.org Cc: Jens Axboe Signed-off-by: Paolo Bonzini --- block/bsg.c | 2 +- block/scsi_ioctl.c | 7 ++++--- drivers/scsi/sg.c | 3 ++- include/linux/blkdev.h | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/block/bsg.c b/block/bsg.c index ff64ae3..eb5ad59 100644 --- a/block/bsg.c +++ b/block/bsg.c @@ -187,7 +187,7 @@ static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq, return -EFAULT; if (hdr->subprotocol == BSG_SUB_PROTOCOL_SCSI_CMD) { - if (blk_verify_command(rq->cmd, has_write_perm)) + if (blk_verify_command(q, rq->cmd, has_write_perm)) return -EPERM; } else if (!capable(CAP_SYS_RAWIO)) return -EPERM; diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index 9a87daa..a737562 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c @@ -196,7 +196,8 @@ static void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter) __set_bit(GPCMD_SET_READ_AHEAD, filter->write_ok); } -int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm) +int blk_verify_command(struct request_queue *q, + unsigned char *cmd, fmode_t has_write_perm) { struct blk_cmd_filter *filter = &blk_default_cmd_filter; @@ -225,7 +226,7 @@ static int blk_fill_sghdr_rq(struct request_queue *q, struct request *rq, { if (copy_from_user(rq->cmd, hdr->cmdp, hdr->cmd_len)) return -EFAULT; - if (blk_verify_command(rq->cmd, mode & FMODE_WRITE)) + if (blk_verify_command(q, rq->cmd, mode & FMODE_WRITE)) return -EPERM; /* @@ -472,7 +473,7 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len)) goto error; - err = blk_verify_command(rq->cmd, mode & FMODE_WRITE); + err = blk_verify_command(q, rq->cmd, mode & FMODE_WRITE); if (err) goto error; diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index be2c9a6..cab816f 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -217,11 +217,12 @@ static void sg_put_dev(Sg_device *sdp); static int sg_allow_access(struct file *filp, unsigned char *cmd) { struct sg_fd *sfp = filp->private_data; + struct request_queue *q = sfp->parentdp->device->request_queue; if (sfp->parentdp->device->type == TYPE_SCANNER) return 0; - return blk_verify_command(cmd, filp->f_mode & FMODE_WRITE); + return blk_verify_command(q, cmd, filp->f_mode & FMODE_WRITE); } static int get_exclude(Sg_device *sdp) diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index f94bc83..0782336 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1061,7 +1061,8 @@ static inline int sb_issue_zeroout(struct super_block *sb, sector_t block, gfp_mask); } -extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); +extern int blk_verify_command(struct request_queue *q, + unsigned char *cmd, fmode_t has_write_perm); enum blk_default_limits { BLK_MAX_SEGMENTS = 128, -- 1.7.1