From patchwork Tue Sep 20 18:34:24 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9342259 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EA43F607D0 for ; Tue, 20 Sep 2016 18:34:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E2DFB29A00 for ; Tue, 20 Sep 2016 18:34:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D78E729A67; Tue, 20 Sep 2016 18:34:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D29F929A00 for ; Tue, 20 Sep 2016 18:34:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752607AbcITSe2 (ORCPT ); Tue, 20 Sep 2016 14:34:28 -0400 Received: from mail-qk0-f195.google.com ([209.85.220.195]:36337 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752045AbcITSe1 (ORCPT ); Tue, 20 Sep 2016 14:34:27 -0400 Received: by mail-qk0-f195.google.com with SMTP id z143so1600523qka.3 for ; Tue, 20 Sep 2016 11:34:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id; bh=0UXPFCP4lpfivzXfOp+oFF5Fp/8YNO+gxA7+g7df5s4=; b=T7GfvlwKcPBpdzMiEZvXjy3sS0h+JiqCJQjCBi30vtGo1M5qtKHKj/MA8h/fjmipGA K0dzccslesqJfLhjrqyYMire5XcnPAFvIeGrn3a+6BMK+x4VTGWINgqTPUrhfuD98l0I trV0/wv28H+dkG1uAatdoQMJfzOr9QGiBQkTHs/rcvheTk2VtfbOAM5m2c3gmkoAIT8d rrV94Mh6Vo4IcM2P1X9t6ASCAUTgMqV0TuaKUscutl8o5/4NCR6AgvEvAI0wDGWePnww JBJJwihheMy2SmmZfZvq3zMjBnbEORNIhUkSHqhajZlCVD60Qfx5uBKETyFCmob05IiJ NfPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=0UXPFCP4lpfivzXfOp+oFF5Fp/8YNO+gxA7+g7df5s4=; b=DDXhBkmk9FP4Ff/cAUNYlMRMK+Xe/OVbShai9Wc7VehU62dM3hLPZy4jU1lUz2v0Co 6ylcy/dk2yYAaPfwus/MagBV7a3WMTIt3FUotb+lxNP1zm7Mta7cep/rAnYynNrKwA6F vsxd1s+ab7v2DE2ogSEFPbsuAZHtirkU+5wdTThLJ3f0Z88+H+sv1V46C+8eg0hipRD0 XnxjBt9HqhE7NsB8QEvEPhRHWd7Jpwr/Fcn71FLnZyvaCYiP7lOxk5nhYM5fKx0dUuDr vTf5+4lITJ7hyTzIrUGClfDYzg+fwzfMfl+sCjfJOVqC0bs8jDuqh7duk4f6bRyqZhCs VBSQ== X-Gm-Message-State: AE9vXwNK+rwo9jh/cI6aCnzeSUjv5NNjGjqHnf7dhKnYxOcStBu3HV1DypJQ+KEWab6w1g== X-Received: by 10.55.25.24 with SMTP id k24mr34315201qkh.259.1474396466669; Tue, 20 Sep 2016 11:34:26 -0700 (PDT) Received: from leira.trondhjem.org.localdomain (50-108-86-94.adr01.mskg.mi.frontiernet.net. [50.108.86.94]) by smtp.gmail.com with ESMTPSA id o43sm16829923qtc.7.2016.09.20.11.34.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 20 Sep 2016 11:34:26 -0700 (PDT) From: Trond Myklebust To: anna.schumaker@netapp.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH] NFS: nfs_prime_dcache must validate the filename Date: Tue, 20 Sep 2016 14:34:24 -0400 Message-Id: <1474396464-19663-1-git-send-email-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.7.4 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Before we try to stash it in the dcache, we need to at least check that the filename passed to us by the server is non-empty and doesn't contain any illegal '\0' or '/' characters. Signed-off-by: Trond Myklebust --- fs/nfs/dir.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 578c8ce1aca1..f20460711546 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -496,6 +496,14 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry) return; if (!(entry->fattr->valid & NFS_ATTR_FATTR_FSID)) return; + if (filename.len == 0) + return; + /* Validate that the name doesn't contain any illegal '\0' */ + if (strnlen(filename.name, filename.len) != filename.len) + return; + /* ...or '/' */ + if (strnchr(filename.name, filename.len, '/')) + return; if (filename.name[0] == '.') { if (filename.len == 1) return;