This change makes __dentry_path() and d_path() immediately return ENAMETOOLONG if buflen < 2.
Cc: Jan Kratochvil <jan.kratoch...@redhat.com> Cc: Oleg Nesterov <o...@redhat.com> Cc: linux-kernel@vger.kernel.org Signed-off-by: Denys Vlasenko <dvlas...@redhat.com> --- fs/dcache.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index cb4a106..2fba276 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -3055,6 +3055,9 @@ char *d_path(const struct path *path, char *buf, int buflen) struct path root; int error; + if (buflen < 2) + return ERR_PTR(-ENAMETOOLONG); + /* * We have various synthetic filesystems that never get mounted. On * these filesystems dentries are never used for lookup purposes, and @@ -3122,13 +3125,14 @@ static char *__dentry_path(struct dentry *dentry, char *buf, int buflen) int len, seq = 0; int error = 0; + if (buflen < 2) + goto Elong; + rcu_read_lock(); restart: end = buf + buflen; len = buflen; prepend(&end, &len, "\0", 1); - if (buflen < 1) - goto Elong; /* Get '/' right */ retval = end-1; *retval = '/'; -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/