diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_ioctl.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index a034cf624437..4ea1ee18aded 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
@@ -447,12 +447,12 @@ xfs_attrlist_by_handle( | |||
447 | int | 447 | int |
448 | xfs_attrmulti_attr_get( | 448 | xfs_attrmulti_attr_get( |
449 | struct inode *inode, | 449 | struct inode *inode, |
450 | char *name, | 450 | unsigned char *name, |
451 | char __user *ubuf, | 451 | unsigned char __user *ubuf, |
452 | __uint32_t *len, | 452 | __uint32_t *len, |
453 | __uint32_t flags) | 453 | __uint32_t flags) |
454 | { | 454 | { |
455 | char *kbuf; | 455 | unsigned char *kbuf; |
456 | int error = EFAULT; | 456 | int error = EFAULT; |
457 | 457 | ||
458 | if (*len > XATTR_SIZE_MAX) | 458 | if (*len > XATTR_SIZE_MAX) |
@@ -476,12 +476,12 @@ xfs_attrmulti_attr_get( | |||
476 | int | 476 | int |
477 | xfs_attrmulti_attr_set( | 477 | xfs_attrmulti_attr_set( |
478 | struct inode *inode, | 478 | struct inode *inode, |
479 | char *name, | 479 | unsigned char *name, |
480 | const char __user *ubuf, | 480 | const unsigned char __user *ubuf, |
481 | __uint32_t len, | 481 | __uint32_t len, |
482 | __uint32_t flags) | 482 | __uint32_t flags) |
483 | { | 483 | { |
484 | char *kbuf; | 484 | unsigned char *kbuf; |
485 | int error = EFAULT; | 485 | int error = EFAULT; |
486 | 486 | ||
487 | if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) | 487 | if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) |
@@ -501,7 +501,7 @@ xfs_attrmulti_attr_set( | |||
501 | int | 501 | int |
502 | xfs_attrmulti_attr_remove( | 502 | xfs_attrmulti_attr_remove( |
503 | struct inode *inode, | 503 | struct inode *inode, |
504 | char *name, | 504 | unsigned char *name, |
505 | __uint32_t flags) | 505 | __uint32_t flags) |
506 | { | 506 | { |
507 | if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) | 507 | if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) |
@@ -519,7 +519,7 @@ xfs_attrmulti_by_handle( | |||
519 | xfs_fsop_attrmulti_handlereq_t am_hreq; | 519 | xfs_fsop_attrmulti_handlereq_t am_hreq; |
520 | struct dentry *dentry; | 520 | struct dentry *dentry; |
521 | unsigned int i, size; | 521 | unsigned int i, size; |
522 | char *attr_name; | 522 | unsigned char *attr_name; |
523 | 523 | ||
524 | if (!capable(CAP_SYS_ADMIN)) | 524 | if (!capable(CAP_SYS_ADMIN)) |
525 | return -XFS_ERROR(EPERM); | 525 | return -XFS_ERROR(EPERM); |
@@ -547,7 +547,7 @@ xfs_attrmulti_by_handle( | |||
547 | 547 | ||
548 | error = 0; | 548 | error = 0; |
549 | for (i = 0; i < am_hreq.opcount; i++) { | 549 | for (i = 0; i < am_hreq.opcount; i++) { |
550 | ops[i].am_error = strncpy_from_user(attr_name, | 550 | ops[i].am_error = strncpy_from_user((char *)attr_name, |
551 | ops[i].am_attrname, MAXNAMELEN); | 551 | ops[i].am_attrname, MAXNAMELEN); |
552 | if (ops[i].am_error == 0 || ops[i].am_error == MAXNAMELEN) | 552 | if (ops[i].am_error == 0 || ops[i].am_error == MAXNAMELEN) |
553 | error = -ERANGE; | 553 | error = -ERANGE; |
@@ -1431,6 +1431,9 @@ xfs_file_ioctl( | |||
1431 | if (!capable(CAP_SYS_ADMIN)) | 1431 | if (!capable(CAP_SYS_ADMIN)) |
1432 | return -EPERM; | 1432 | return -EPERM; |
1433 | 1433 | ||
1434 | if (mp->m_flags & XFS_MOUNT_RDONLY) | ||
1435 | return -XFS_ERROR(EROFS); | ||
1436 | |||
1434 | if (copy_from_user(&inout, arg, sizeof(inout))) | 1437 | if (copy_from_user(&inout, arg, sizeof(inout))) |
1435 | return -XFS_ERROR(EFAULT); | 1438 | return -XFS_ERROR(EFAULT); |
1436 | 1439 | ||