From patchwork Fri Mar 23 19:23:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Biggers X-Patchwork-Id: 890169 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BAGtOVM4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 407DDl5294z9s0w for ; Sat, 24 Mar 2018 06:31:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752613AbeCWTbe (ORCPT ); Fri, 23 Mar 2018 15:31:34 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:44154 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752563AbeCWTbU (ORCPT ); Fri, 23 Mar 2018 15:31:20 -0400 Received: by mail-pl0-f68.google.com with SMTP id 9-v6so8021326ple.11; Fri, 23 Mar 2018 12:31:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jg7uWDdDwkDKNhboestHo/v9jXXY5OGBPD+gqcHk+xU=; b=BAGtOVM40E/p7gBcdW3qvRcVSsQPXg4T6tsadKjQ722HKdMVhA57T3cqrojBjddoo0 juhW9svk4/OxuJ9qpBDhI3fGyy8rAPBLQGkTpEs20tsRywctH8FcLYlxEwSt6wWOF5Vk uA4i/e1/2CIBDRJsQ2Zv0gRxyQfyqwVUtS9Q9JwcbUfk6PRRS9SbaKuJWKFf3sHMKJsc h+TF19Q7+pG+wjJGvekMn9/Cq2gIdmEfZlzhFMqXAYla81BDqsclv+hS9Dg8iEf9Xjj1 2yfi7L2ocfD9TM9bUwpRCLXH22vVkyuZhmjCy+szLXQHu/tV8PB8esX7qQ9PTYJ+oVjN Hxzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jg7uWDdDwkDKNhboestHo/v9jXXY5OGBPD+gqcHk+xU=; b=t98f76sEsyJdI9U60/5dmn+9xVJ6umgk7yuNjwILuBU+jNEXWvT1j1n854TWkDI6FY q9z2pXMYUf9kZJyASo2UKQUFTa7N5xpF2DMcnJuvzonoazNBIoUfYmabJlKNMcRdJij0 R1cks9/dAC08iURgghoBojKDOI4yWDsfDvRYovxOBtUCeAF9eBcc9pYUUGsRSEp7bkoG SDWpvQdyn2UqJPII3hcTv6dj43qMBgTTLm/yFsJuhn2fxme2fkPbOYMPy1ZpYrZu4jeX sH0gZwXRfnZciGj+HDWRrI2Rt/TJvFdYG7evyIUvbHGYOK34sP/JLRXwLOGPpphpR5TR V0Ww== X-Gm-Message-State: AElRT7EyE4ngL7YPx7+OM3hnmKArQIDhCFc5PJJJNfaRJxJD2fX4+Cxb RTu8T+bl+BVa5+9BHnfe7zsb4wwt X-Google-Smtp-Source: AG47ELvOq71y9dglw7CCIcnFDgTlr5MimwfSkJG7yKoUclocX5kvs2zJB8Q5iG5YcZENKiv2zF/8uw== X-Received: by 2002:a17:902:9a42:: with SMTP id x2-v6mr18157317plv.201.1521833479838; Fri, 23 Mar 2018 12:31:19 -0700 (PDT) Received: from ebiggers-linuxstation.kir.corp.google.com ([2620:15c:17:3:dc28:5c82:b905:e8a8]) by smtp.gmail.com with ESMTPSA id x1sm20924545pfk.144.2018.03.23.12.31.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Mar 2018 12:31:19 -0700 (PDT) From: Eric Biggers To: linux-fscrypt@vger.kernel.org, "Theodore Y . Ts'o" Cc: linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-mtd@lists.infradead.org, Jaegeuk Kim , Eric Biggers Subject: [PATCH 09/14] fscrypt: make fscrypt_operations.max_namelen an integer Date: Fri, 23 Mar 2018 12:23:53 -0700 Message-Id: <20180323192358.95691-10-ebiggers3@gmail.com> X-Mailer: git-send-email 2.17.0.rc0.231.g781580f067-goog In-Reply-To: <20180323192358.95691-1-ebiggers3@gmail.com> References: <20180323192358.95691-1-ebiggers3@gmail.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Eric Biggers Now ->max_namelen() is only called to limit the filename length when adding NUL padding, and only for real filenames -- not symlink targets. It also didn't give the correct length for symlink targets anyway since it forgot to subtract 'sizeof(struct fscrypt_symlink_data)'. Thus, change ->max_namelen from a function to a simple 'unsigned int' that gives the filesystem's maximum filename length. Signed-off-by: Eric Biggers --- fs/crypto/fname.c | 2 +- fs/ext4/super.c | 8 +------- fs/f2fs/super.c | 8 +------- fs/ubifs/crypto.c | 10 +--------- include/linux/fscrypt_supp.h | 2 +- 5 files changed, 5 insertions(+), 25 deletions(-) diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c index c4eb3a235ae4..39091fc31e98 100644 --- a/fs/crypto/fname.c +++ b/fs/crypto/fname.c @@ -334,7 +334,7 @@ int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname, if (dir->i_crypt_info) { if (!fscrypt_fname_encrypted_size(dir, iname->len, - dir->i_sb->s_cop->max_namelen(dir), + dir->i_sb->s_cop->max_namelen, &fname->crypto_buf.len)) return -ENAMETOOLONG; fname->crypto_buf.name = kmalloc(fname->crypto_buf.len, diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 39bf464c35f1..63242840b1af 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1235,19 +1235,13 @@ static bool ext4_dummy_context(struct inode *inode) return DUMMY_ENCRYPTION_ENABLED(EXT4_SB(inode->i_sb)); } -static unsigned ext4_max_namelen(struct inode *inode) -{ - return S_ISLNK(inode->i_mode) ? inode->i_sb->s_blocksize : - EXT4_NAME_LEN; -} - static const struct fscrypt_operations ext4_cryptops = { .key_prefix = "ext4:", .get_context = ext4_get_context, .set_context = ext4_set_context, .dummy_context = ext4_dummy_context, .empty_dir = ext4_empty_dir, - .max_namelen = ext4_max_namelen, + .max_namelen = EXT4_NAME_LEN, }; #endif diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index 8173ae688814..d4c9d580d32f 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -1802,18 +1802,12 @@ static int f2fs_set_context(struct inode *inode, const void *ctx, size_t len, ctx, len, fs_data, XATTR_CREATE); } -static unsigned f2fs_max_namelen(struct inode *inode) -{ - return S_ISLNK(inode->i_mode) ? - inode->i_sb->s_blocksize : F2FS_NAME_LEN; -} - static const struct fscrypt_operations f2fs_cryptops = { .key_prefix = "f2fs:", .get_context = f2fs_get_context, .set_context = f2fs_set_context, .empty_dir = f2fs_empty_dir, - .max_namelen = f2fs_max_namelen, + .max_namelen = F2FS_NAME_LEN, }; #endif diff --git a/fs/ubifs/crypto.c b/fs/ubifs/crypto.c index 616a688f5d8f..55c508fe8131 100644 --- a/fs/ubifs/crypto.c +++ b/fs/ubifs/crypto.c @@ -24,14 +24,6 @@ static bool ubifs_crypt_empty_dir(struct inode *inode) return ubifs_check_dir_empty(inode) == 0; } -static unsigned int ubifs_crypt_max_namelen(struct inode *inode) -{ - if (S_ISLNK(inode->i_mode)) - return UBIFS_MAX_INO_DATA; - else - return UBIFS_MAX_NLEN; -} - int ubifs_encrypt(const struct inode *inode, struct ubifs_data_node *dn, unsigned int in_len, unsigned int *out_len, int block) { @@ -89,5 +81,5 @@ const struct fscrypt_operations ubifs_crypt_operations = { .get_context = ubifs_crypt_get_context, .set_context = ubifs_crypt_set_context, .empty_dir = ubifs_crypt_empty_dir, - .max_namelen = ubifs_crypt_max_namelen, + .max_namelen = UBIFS_MAX_NLEN, }; diff --git a/include/linux/fscrypt_supp.h b/include/linux/fscrypt_supp.h index c9c2cc26bc62..5080cb1bec4c 100644 --- a/include/linux/fscrypt_supp.h +++ b/include/linux/fscrypt_supp.h @@ -29,7 +29,7 @@ struct fscrypt_operations { int (*set_context)(struct inode *, const void *, size_t, void *); bool (*dummy_context)(struct inode *); bool (*empty_dir)(struct inode *); - unsigned (*max_namelen)(struct inode *); + unsigned int max_namelen; }; struct fscrypt_ctx {