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: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
9e69fbb537
commit
337ad41dea
2 changed files with 5 additions and 3 deletions
|
@ -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_read(cmd) [cmd] = CMD_READ_SAFE
|
||||||
#define safe_for_write(cmd) [cmd] = CMD_WRITE_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] = {
|
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" */
|
/* Otherwise fail it with an "Operation not permitted" */
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(blk_verify_command);
|
||||||
|
|
||||||
int blk_fill_sghdr_rq(request_queue_t *q, struct request *rq,
|
int blk_fill_sghdr_rq(request_queue_t *q, struct request *rq,
|
||||||
struct sg_io_hdr *hdr, int has_write_perm)
|
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))
|
if (copy_from_user(rq->cmd, hdr->cmdp, hdr->cmd_len))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
if (verify_command(rq->cmd, has_write_perm))
|
if (blk_verify_command(rq->cmd, has_write_perm))
|
||||||
return -EPERM;
|
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))
|
if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len))
|
||||||
goto error;
|
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)
|
if (err)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
|
|
@ -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_unmap_sghdr_rq(struct request *, struct sg_io_hdr *);
|
||||||
extern int blk_complete_sghdr_rq(struct request *, struct sg_io_hdr *,
|
extern int blk_complete_sghdr_rq(struct request *, struct sg_io_hdr *,
|
||||||
struct bio *);
|
struct bio *);
|
||||||
|
extern int blk_verify_command(unsigned char *, int);
|
||||||
|
|
||||||
static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
|
static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue