]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
cifs: fix off-by-one bug in build_unc_path_to_root
authorJeff Layton <jlayton@redhat.com>
Fri, 31 May 2013 14:00:18 +0000 (10:00 -0400)
committerSteve French <sfrench@us.ibm.com>
Fri, 31 May 2013 21:23:35 +0000 (16:23 -0500)
commit 839db3d10a (cifs: fix up handling of prefixpath= option) changed
the code such that the vol->prepath no longer contained a leading
delimiter and then fixed up the places that accessed that field to
account for that change.

One spot in build_unc_path_to_root was missed however. When doing the
pointer addition on pos, that patch failed to account for the fact that
we had already incremented "pos" by one when adding the length of the
prepath. This caused a buffer overrun by one byte.

This patch fixes the problem by correcting the handling of "pos".

Cc: <stable@vger.kernel.org> # v3.8+
Reported-by: Marcus Moeller <marcus.moeller@gmx.ch>
Reported-by: Ken Fallon <ken.fallon@gmail.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/connect.c

index 5b97e56ddbca8fd8b4a4552c95acd97d5ca6c318..e3bc39bb9d12b224d7cda96e2e55b9babed68c0b 100644 (file)
@@ -3279,8 +3279,8 @@ build_unc_path_to_root(const struct smb_vol *vol,
        pos = full_path + unc_len;
 
        if (pplen) {
-               *pos++ = CIFS_DIR_SEP(cifs_sb);
-               strncpy(pos, vol->prepath, pplen);
+               *pos = CIFS_DIR_SEP(cifs_sb);
+               strncpy(pos + 1, vol->prepath, pplen);
                pos += pplen;
        }