diff mbox

cifs_dbg() outputs an uninitialized buffer in cifs_readdir()

Message ID 56977B4A.3070002@virtuozzo.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vasily Averin Jan. 14, 2016, 10:41 a.m. UTC
In some cases tmp_bug can be not filled in cifs_filldir and stay uninitialized,
therefore its printk with "%s" modifier can leak content of kernelspace memory.
If old content of this buffer does not contain '\0' access bejond end of
allocated object can crash the host.

Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
---
 fs/cifs/readdir.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Steve French Jan. 14, 2016, 9:04 p.m. UTC | #1
merged into cifs-2.6.git and added cc:stable

Let me know if other cifs/smb3 patches planned for 4.5

On Thu, Jan 14, 2016 at 4:41 AM, Vasily Averin <vvs@virtuozzo.com> wrote:
> In some cases tmp_bug can be not filled in cifs_filldir and stay uninitialized,
> therefore its printk with "%s" modifier can leak content of kernelspace memory.
> If old content of this buffer does not contain '\0' access bejond end of
> allocated object can crash the host.
>
> Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
> ---
>  fs/cifs/readdir.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
> index 0557c45..b30a4a6 100644
> --- a/fs/cifs/readdir.c
> +++ b/fs/cifs/readdir.c
> @@ -847,6 +847,7 @@ int cifs_readdir(struct file *file, struct dir_context *ctx)
>                  * if buggy server returns . and .. late do we want to
>                  * check for that here?
>                  */
> +               *tmp_buf = 0;
>                 rc = cifs_filldir(current_entry, file, ctx,
>                                   tmp_buf, max_len);
>                 if (rc) {
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
index 0557c45..b30a4a6 100644
--- a/fs/cifs/readdir.c
+++ b/fs/cifs/readdir.c
@@ -847,6 +847,7 @@  int cifs_readdir(struct file *file, struct dir_context *ctx)
 		 * if buggy server returns . and .. late do we want to
 		 * check for that here?
 		 */
+		*tmp_buf = 0;
 		rc = cifs_filldir(current_entry, file, ctx,
 				  tmp_buf, max_len);
 		if (rc) {