From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752773AbaAXOFI (ORCPT ); Fri, 24 Jan 2014 09:05:08 -0500 Received: from mx1.redhat.com ([209.132.183.28]:31832 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752445AbaAXOFH (ORCPT ); Fri, 24 Jan 2014 09:05:07 -0500 From: Denys Vlasenko To: Al Viro Cc: Denys Vlasenko , Jan Kratochvil , Oleg Nesterov , linux-kernel@vger.kernel.org Subject: [PATCH] dcache: error out if the name buffer is too short Date: Fri, 24 Jan 2014 15:04:59 +0100 Message-Id: <1390572299-3074-1-git-send-email-dvlasenk@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This change makes __dentry_path() and d_path() immediately return ENAMETOOLONG if buflen < 2. Cc: Jan Kratochvil Cc: Oleg Nesterov Cc: linux-kernel@vger.kernel.org Signed-off-by: Denys Vlasenko --- 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