Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit cdb1efe

Browse files
aalexandrovichgregkh
authored andcommitted
fs/ntfs3: Fix sparse warning in ni_fiemap
[ Upstream commit 62fea78 ] The interface of fiemap_fill_next_extent_k() was modified to eliminate the sparse warning. Fixes: d57431c ("fs/ntfs3: Do copy_to_user out of run_lock") Reported-by: kernel test robot <[email protected]> Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ Signed-off-by: Konstantin Komarov <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 16f93bd commit cdb1efe

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

fs/ntfs3/frecord.c

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1900,13 +1900,13 @@ enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr,
19001900

19011901
/*
19021902
* fiemap_fill_next_extent_k - a copy of fiemap_fill_next_extent
1903-
* but it accepts kernel address for fi_extents_start
1903+
* but it uses 'fe_k' instead of fieinfo->fi_extents_start
19041904
*/
19051905
static int fiemap_fill_next_extent_k(struct fiemap_extent_info *fieinfo,
1906-
u64 logical, u64 phys, u64 len, u32 flags)
1906+
struct fiemap_extent *fe_k, u64 logical,
1907+
u64 phys, u64 len, u32 flags)
19071908
{
19081909
struct fiemap_extent extent;
1909-
struct fiemap_extent __user *dest = fieinfo->fi_extents_start;
19101910

19111911
/* only count the extents */
19121912
if (fieinfo->fi_extents_max == 0) {
@@ -1930,8 +1930,7 @@ static int fiemap_fill_next_extent_k(struct fiemap_extent_info *fieinfo,
19301930
extent.fe_length = len;
19311931
extent.fe_flags = flags;
19321932

1933-
dest += fieinfo->fi_extents_mapped;
1934-
memcpy(dest, &extent, sizeof(extent));
1933+
memcpy(fe_k + fieinfo->fi_extents_mapped, &extent, sizeof(extent));
19351934

19361935
fieinfo->fi_extents_mapped++;
19371936
if (fieinfo->fi_extents_mapped == fieinfo->fi_extents_max)
@@ -1949,7 +1948,6 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
19491948
__u64 vbo, __u64 len)
19501949
{
19511950
int err = 0;
1952-
struct fiemap_extent __user *fe_u = fieinfo->fi_extents_start;
19531951
struct fiemap_extent *fe_k = NULL;
19541952
struct ntfs_sb_info *sbi = ni->mi.sbi;
19551953
u8 cluster_bits = sbi->cluster_bits;
@@ -2008,7 +2006,6 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
20082006
err = -ENOMEM;
20092007
goto out;
20102008
}
2011-
fieinfo->fi_extents_start = fe_k;
20122009

20132010
end = vbo + len;
20142011
alloc_size = le64_to_cpu(attr->nres.alloc_size);
@@ -2098,8 +2095,8 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
20982095
if (vbo + dlen >= end)
20992096
flags |= FIEMAP_EXTENT_LAST;
21002097

2101-
err = fiemap_fill_next_extent_k(fieinfo, vbo, lbo, dlen,
2102-
flags);
2098+
err = fiemap_fill_next_extent_k(fieinfo, fe_k, vbo, lbo,
2099+
dlen, flags);
21032100

21042101
if (err < 0)
21052102
break;
@@ -2120,7 +2117,7 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
21202117
if (vbo + bytes >= end)
21212118
flags |= FIEMAP_EXTENT_LAST;
21222119

2123-
err = fiemap_fill_next_extent_k(fieinfo, vbo, lbo, bytes,
2120+
err = fiemap_fill_next_extent_k(fieinfo, fe_k, vbo, lbo, bytes,
21242121
flags);
21252122
if (err < 0)
21262123
break;
@@ -2137,15 +2134,13 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
21372134
/*
21382135
* Copy to user memory out of lock
21392136
*/
2140-
if (copy_to_user(fe_u, fe_k,
2137+
if (copy_to_user(fieinfo->fi_extents_start, fe_k,
21412138
fieinfo->fi_extents_max *
21422139
sizeof(struct fiemap_extent))) {
21432140
err = -EFAULT;
21442141
}
21452142

21462143
out:
2147-
/* Restore original pointer. */
2148-
fieinfo->fi_extents_start = fe_u;
21492144
kfree(fe_k);
21502145
return err;
21512146
}

0 commit comments

Comments
 (0)