Skip to content

Commit

Permalink
ubifs: Don't leak kernel memory to the MTD
Browse files Browse the repository at this point in the history
When UBIFS prepares data structures which will be written to the MTD it
ensues that their lengths are multiple of 8. Since it uses kmalloc() the
padded bytes are left uninitialized and we leak a few bytes of kernel
memory to the MTD.
To make sure that all bytes are initialized, let's switch to kzalloc().
Kzalloc() is fine in this case because the buffers are not huge and in
the IO path the performance bottleneck is anyway the MTD.

Cc: [email protected]
Fixes: 1e51764 ("UBIFS: add new flash file system")
Signed-off-by: Richard Weinberger <[email protected]>
Reviewed-by: Boris Brezillon <[email protected]>
Signed-off-by: Richard Weinberger <[email protected]>
  • Loading branch information
richardweinberger committed Jul 14, 2017
1 parent 480a1a6 commit 4acadda
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions fs/ubifs/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,7 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
/* Make sure to also account for extended attributes */
len += host_ui->data_len;

dent = kmalloc(len, GFP_NOFS);
dent = kzalloc(len, GFP_NOFS);
if (!dent)
return -ENOMEM;

Expand Down Expand Up @@ -968,7 +968,7 @@ int ubifs_jnl_xrename(struct ubifs_info *c, const struct inode *fst_dir,
if (twoparents)
len += plen;

dent1 = kmalloc(len, GFP_NOFS);
dent1 = kzalloc(len, GFP_NOFS);
if (!dent1)
return -ENOMEM;

Expand Down Expand Up @@ -1116,7 +1116,7 @@ int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir,
len = aligned_dlen1 + aligned_dlen2 + ALIGN(ilen, 8) + ALIGN(plen, 8);
if (move)
len += plen;
dent = kmalloc(len, GFP_NOFS);
dent = kzalloc(len, GFP_NOFS);
if (!dent)
return -ENOMEM;

Expand Down Expand Up @@ -1498,7 +1498,7 @@ int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host,
hlen = host_ui->data_len + UBIFS_INO_NODE_SZ;
len = aligned_xlen + UBIFS_INO_NODE_SZ + ALIGN(hlen, 8);

xent = kmalloc(len, GFP_NOFS);
xent = kzalloc(len, GFP_NOFS);
if (!xent)
return -ENOMEM;

Expand Down Expand Up @@ -1605,7 +1605,7 @@ int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode,
aligned_len1 = ALIGN(len1, 8);
aligned_len = aligned_len1 + ALIGN(len2, 8);

ino = kmalloc(aligned_len, GFP_NOFS);
ino = kzalloc(aligned_len, GFP_NOFS);
if (!ino)
return -ENOMEM;

Expand Down

0 comments on commit 4acadda

Please sign in to comment.