Message ID | 20230323115903.1483668-2-arnd@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/3] mm/mmap/vma_merge: actually set next to NULL if not applicable | expand |
On Thu, Mar 23, 2023 at 12:58:35PM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > The error handling in vmap_ram_vread_iter() can return an > uninitialized value in some cases: > > mm/vmalloc.c:3539:6: error: variable 'remains' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized] > if (!vb) > ^~~ > mm/vmalloc.c:3587:17: note: uninitialized use occurs here > return count - remains + zero_iter(iter, remains); > ^~~~~~~ > > Move the initialization up a few lines. > > Fixes: d9cab54f7737 ("mm: vmalloc: convert vread() to vread_iter()") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > mm/vmalloc.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index ebfa1e9fe6f9..fb216495fe5a 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3521,7 +3521,7 @@ static size_t vmap_ram_vread_iter(struct iov_iter *iter, const char *addr, > struct vmap_block *vb; > unsigned long offset; > unsigned int rs, re; > - size_t remains, n; > + size_t remains = count, n; > > /* > * If it's area created by vm_map_ram() interface directly, but > @@ -3545,7 +3545,6 @@ static size_t vmap_ram_vread_iter(struct iov_iter *iter, const char *addr, > goto finished_zero; > } > > - remains = count; > for_each_set_bitrange(rs, re, vb->used_map, VMAP_BBMAP_BITS) { > size_t copied; > > -- > 2.39.2 > > This was also already fixed in a more recent version of this patch set, in v5 I believe. Again apologies for this! Latest version at https://lore.kernel.org/all/cover.1679566220.git.lstoakes@gmail.com
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index ebfa1e9fe6f9..fb216495fe5a 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3521,7 +3521,7 @@ static size_t vmap_ram_vread_iter(struct iov_iter *iter, const char *addr, struct vmap_block *vb; unsigned long offset; unsigned int rs, re; - size_t remains, n; + size_t remains = count, n; /* * If it's area created by vm_map_ram() interface directly, but @@ -3545,7 +3545,6 @@ static size_t vmap_ram_vread_iter(struct iov_iter *iter, const char *addr, goto finished_zero; } - remains = count; for_each_set_bitrange(rs, re, vb->used_map, VMAP_BBMAP_BITS) { size_t copied;