aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nilfs2/ioctl.c11
-rw-r--r--include/linux/nilfs2_fs.h23
2 files changed, 19 insertions, 15 deletions
diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
index 85a291ccc1be..7fbd9fe1d035 100644
--- a/fs/nilfs2/ioctl.c
+++ b/fs/nilfs2/ioctl.c
@@ -41,6 +41,7 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
41 void *, size_t, size_t)) 41 void *, size_t, size_t))
42{ 42{
43 void *buf; 43 void *buf;
44 void __user *base = (void __user *)(unsigned long)argv->v_base;
44 size_t maxmembs, total, n; 45 size_t maxmembs, total, n;
45 ssize_t nr; 46 ssize_t nr;
46 int ret, i; 47 int ret, i;
@@ -64,9 +65,8 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
64 n = (argv->v_nmembs - i < maxmembs) ? 65 n = (argv->v_nmembs - i < maxmembs) ?
65 argv->v_nmembs - i : maxmembs; 66 argv->v_nmembs - i : maxmembs;
66 if ((dir & _IOC_WRITE) && 67 if ((dir & _IOC_WRITE) &&
67 copy_from_user(buf, 68 copy_from_user(buf, base + argv->v_size * i,
68 (void __user *)argv->v_base + argv->v_size * i, 69 argv->v_size * n)) {
69 argv->v_size * n)) {
70 ret = -EFAULT; 70 ret = -EFAULT;
71 break; 71 break;
72 } 72 }
@@ -78,9 +78,8 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
78 break; 78 break;
79 } 79 }
80 if ((dir & _IOC_READ) && 80 if ((dir & _IOC_READ) &&
81 copy_to_user( 81 copy_to_user(base + argv->v_size * i, buf,
82 (void __user *)argv->v_base + argv->v_size * i, 82 argv->v_size * nr)) {
83 buf, argv->v_size * nr)) {
84 ret = -EFAULT; 83 ret = -EFAULT;
85 break; 84 break;
86 } 85 }
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
index b0a6b39eedbc..8fb64ce285fd 100644
--- a/include/linux/nilfs2_fs.h
+++ b/include/linux/nilfs2_fs.h
@@ -499,6 +499,7 @@ NILFS_CHECKPOINT_FNS(SKETCH, sketch)
499/** 499/**
500 * struct nilfs_cpinfo - checkpoint information 500 * struct nilfs_cpinfo - checkpoint information
501 * @ci_flags: flags 501 * @ci_flags: flags
502 * @ci_pad: padding
502 * @ci_cno: checkpoint number 503 * @ci_cno: checkpoint number
503 * @ci_create: creation timestamp 504 * @ci_create: creation timestamp
504 * @ci_nblk_inc: number of blocks incremented by this checkpoint 505 * @ci_nblk_inc: number of blocks incremented by this checkpoint
@@ -508,6 +509,7 @@ NILFS_CHECKPOINT_FNS(SKETCH, sketch)
508 */ 509 */
509struct nilfs_cpinfo { 510struct nilfs_cpinfo {
510 __u32 ci_flags; 511 __u32 ci_flags;
512 __u32 ci_pad;
511 __u64 ci_cno; 513 __u64 ci_cno;
512 __u64 ci_create; 514 __u64 ci_create;
513 __u64 ci_nblk_inc; 515 __u64 ci_nblk_inc;
@@ -668,7 +670,8 @@ enum {
668 */ 670 */
669struct nilfs_cpmode { 671struct nilfs_cpmode {
670 __u64 cm_cno; 672 __u64 cm_cno;
671 int cm_mode; 673 __u32 cm_mode;
674 __u32 cm_pad;
672}; 675};
673 676
674/** 677/**
@@ -676,15 +679,15 @@ struct nilfs_cpmode {
676 * @v_base: 679 * @v_base:
677 * @v_nmembs: 680 * @v_nmembs:
678 * @v_size: 681 * @v_size:
679 * @v_index:
680 * @v_flags: 682 * @v_flags:
683 * @v_index:
681 */ 684 */
682struct nilfs_argv { 685struct nilfs_argv {
683 void *v_base; 686 __u64 v_base;
684 size_t v_nmembs; /* number of members */ 687 __u32 v_nmembs; /* number of members */
685 size_t v_size; /* size of members */ 688 __u16 v_size; /* size of members */
686 int v_index; 689 __u16 v_flags;
687 int v_flags; 690 __u64 v_index;
688}; 691};
689 692
690/** 693/**
@@ -721,8 +724,8 @@ struct nilfs_sustat {
721 __u64 ss_nsegs; 724 __u64 ss_nsegs;
722 __u64 ss_ncleansegs; 725 __u64 ss_ncleansegs;
723 __u64 ss_ndirtysegs; 726 __u64 ss_ndirtysegs;
724 time_t ss_ctime; 727 __u64 ss_ctime;
725 time_t ss_nongc_ctime; 728 __u64 ss_nongc_ctime;
726}; 729};
727 730
728/** 731/**
@@ -750,6 +753,7 @@ struct nilfs_vdesc {
750 __u64 vd_blocknr; 753 __u64 vd_blocknr;
751 __u64 vd_offset; 754 __u64 vd_offset;
752 __u32 vd_flags; 755 __u32 vd_flags;
756 __u32 vd_pad;
753}; 757};
754 758
755/** 759/**
@@ -761,6 +765,7 @@ struct nilfs_bdesc {
761 __u64 bd_blocknr; 765 __u64 bd_blocknr;
762 __u64 bd_offset; 766 __u64 bd_offset;
763 __u32 bd_level; 767 __u32 bd_level;
768 __u32 bd_pad;
764}; 769};
765 770
766#define NILFS_IOCTL_IDENT 'n' 771#define NILFS_IOCTL_IDENT 'n'