Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 337ad41d authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by Jens Axboe
Browse files

block: export blk_verify_command for SG v4



blk_fill_sghdr_rq doesn't work for SG v4 so verify_command needed to
be exported.

Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 9e69fbb5
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ static int sg_emulated_host(request_queue_t *q, int __user *p)
#define safe_for_read(cmd)	[cmd] = CMD_READ_SAFE
#define safe_for_write(cmd)	[cmd] = CMD_WRITE_SAFE

static int verify_command(unsigned char *cmd, int has_write_perm)
int blk_verify_command(unsigned char *cmd, int has_write_perm)
{
	static unsigned char cmd_type[256] = {

@@ -212,6 +212,7 @@ static int verify_command(unsigned char *cmd, int has_write_perm)
	/* Otherwise fail it with an "Operation not permitted" */
	return -EPERM;
}
EXPORT_SYMBOL_GPL(blk_verify_command);

int blk_fill_sghdr_rq(request_queue_t *q, struct request *rq,
		      struct sg_io_hdr *hdr, int has_write_perm)
@@ -220,7 +221,7 @@ int blk_fill_sghdr_rq(request_queue_t *q, struct request *rq,

	if (copy_from_user(rq->cmd, hdr->cmdp, hdr->cmd_len))
		return -EFAULT;
	if (verify_command(rq->cmd, has_write_perm))
	if (blk_verify_command(rq->cmd, has_write_perm))
		return -EPERM;

	/*
@@ -457,7 +458,7 @@ int sg_scsi_ioctl(struct file *file, struct request_queue *q,
	if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len))
		goto error;

	err = verify_command(rq->cmd, file->f_mode & FMODE_WRITE);
	err = blk_verify_command(rq->cmd, file->f_mode & FMODE_WRITE);
	if (err)
		goto error;

+1 −0
Original line number Diff line number Diff line
@@ -692,6 +692,7 @@ extern int blk_fill_sghdr_rq(request_queue_t *, struct request *,
extern int blk_unmap_sghdr_rq(struct request *, struct sg_io_hdr *);
extern int blk_complete_sghdr_rq(struct request *, struct sg_io_hdr *,
			  struct bio *);
extern int blk_verify_command(unsigned char *, int);

static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
{