* [PATCH v2] fscrypt: constify inode parameter to filename encryption functions
@ 2019-12-15 21:39 Eric Biggers
2020-01-03 16:59 ` Eric Biggers
0 siblings, 1 reply; 2+ messages in thread
From: Eric Biggers @ 2019-12-15 21:39 UTC (permalink / raw)
To: linux-fscrypt; +Cc: Daniel Rosenberg
From: Eric Biggers <ebiggers@google.com>
Constify the struct inode parameter to fscrypt_fname_disk_to_usr() and
the other filename encryption functions so that users don't have to pass
in a non-const inode when they are dealing with a const one, as in [1].
[1] https://lkml.kernel.org/linux-ext4/20191203051049.44573-6-drosen@google.com/
Cc: Daniel Rosenberg <drosen@google.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
v2: also update the !CONFIG_FS_ENCRYPTION version of
fscrypt_fname_disk_to_usr().
fs/crypto/fname.c | 20 ++++++++++----------
fs/crypto/fscrypt_private.h | 2 +-
include/linux/fscrypt.h | 8 +++++---
3 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c
index 3da3707c10e3..c87b71aa2353 100644
--- a/fs/crypto/fname.c
+++ b/fs/crypto/fname.c
@@ -34,12 +34,12 @@ static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
*
* Return: 0 on success, -errno on failure
*/
-int fname_encrypt(struct inode *inode, const struct qstr *iname,
+int fname_encrypt(const struct inode *inode, const struct qstr *iname,
u8 *out, unsigned int olen)
{
struct skcipher_request *req = NULL;
DECLARE_CRYPTO_WAIT(wait);
- struct fscrypt_info *ci = inode->i_crypt_info;
+ const struct fscrypt_info *ci = inode->i_crypt_info;
struct crypto_skcipher *tfm = ci->ci_ctfm;
union fscrypt_iv iv;
struct scatterlist sg;
@@ -85,14 +85,14 @@ int fname_encrypt(struct inode *inode, const struct qstr *iname,
*
* Return: 0 on success, -errno on failure
*/
-static int fname_decrypt(struct inode *inode,
- const struct fscrypt_str *iname,
- struct fscrypt_str *oname)
+static int fname_decrypt(const struct inode *inode,
+ const struct fscrypt_str *iname,
+ struct fscrypt_str *oname)
{
struct skcipher_request *req = NULL;
DECLARE_CRYPTO_WAIT(wait);
struct scatterlist src_sg, dst_sg;
- struct fscrypt_info *ci = inode->i_crypt_info;
+ const struct fscrypt_info *ci = inode->i_crypt_info;
struct crypto_skcipher *tfm = ci->ci_ctfm;
union fscrypt_iv iv;
int res;
@@ -247,10 +247,10 @@ EXPORT_SYMBOL(fscrypt_fname_free_buffer);
*
* Return: 0 on success, -errno on failure
*/
-int fscrypt_fname_disk_to_usr(struct inode *inode,
- u32 hash, u32 minor_hash,
- const struct fscrypt_str *iname,
- struct fscrypt_str *oname)
+int fscrypt_fname_disk_to_usr(const struct inode *inode,
+ u32 hash, u32 minor_hash,
+ const struct fscrypt_str *iname,
+ struct fscrypt_str *oname)
{
const struct qstr qname = FSTR_TO_QSTR(iname);
struct fscrypt_digested_name digested_name;
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h
index 23cef4d3793a..5792ecbd4d24 100644
--- a/fs/crypto/fscrypt_private.h
+++ b/fs/crypto/fscrypt_private.h
@@ -260,7 +260,7 @@ void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
const struct fscrypt_info *ci);
/* fname.c */
-extern int fname_encrypt(struct inode *inode, const struct qstr *iname,
+extern int fname_encrypt(const struct inode *inode, const struct qstr *iname,
u8 *out, unsigned int olen);
extern bool fscrypt_fname_encrypted_size(const struct inode *inode,
u32 orig_len, u32 max_len,
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index 1a7bffe78ed5..6eaa729544a3 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -153,8 +153,10 @@ static inline void fscrypt_free_filename(struct fscrypt_name *fname)
extern int fscrypt_fname_alloc_buffer(const struct inode *, u32,
struct fscrypt_str *);
extern void fscrypt_fname_free_buffer(struct fscrypt_str *);
-extern int fscrypt_fname_disk_to_usr(struct inode *, u32, u32,
- const struct fscrypt_str *, struct fscrypt_str *);
+extern int fscrypt_fname_disk_to_usr(const struct inode *inode,
+ u32 hash, u32 minor_hash,
+ const struct fscrypt_str *iname,
+ struct fscrypt_str *oname);
#define FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE 32
@@ -438,7 +440,7 @@ static inline void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
return;
}
-static inline int fscrypt_fname_disk_to_usr(struct inode *inode,
+static inline int fscrypt_fname_disk_to_usr(const struct inode *inode,
u32 hash, u32 minor_hash,
const struct fscrypt_str *iname,
struct fscrypt_str *oname)
--
2.24.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] fscrypt: constify inode parameter to filename encryption functions
2019-12-15 21:39 [PATCH v2] fscrypt: constify inode parameter to filename encryption functions Eric Biggers
@ 2020-01-03 16:59 ` Eric Biggers
0 siblings, 0 replies; 2+ messages in thread
From: Eric Biggers @ 2020-01-03 16:59 UTC (permalink / raw)
To: linux-fscrypt; +Cc: Daniel Rosenberg
On Sun, Dec 15, 2019 at 01:39:47PM -0800, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Constify the struct inode parameter to fscrypt_fname_disk_to_usr() and
> the other filename encryption functions so that users don't have to pass
> in a non-const inode when they are dealing with a const one, as in [1].
>
> [1] https://lkml.kernel.org/linux-ext4/20191203051049.44573-6-drosen@google.com/
>
> Cc: Daniel Rosenberg <drosen@google.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>
> v2: also update the !CONFIG_FS_ENCRYPTION version of
> fscrypt_fname_disk_to_usr().
>
> fs/crypto/fname.c | 20 ++++++++++----------
> fs/crypto/fscrypt_private.h | 2 +-
> include/linux/fscrypt.h | 8 +++++---
> 3 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c
> index 3da3707c10e3..c87b71aa2353 100644
> --- a/fs/crypto/fname.c
> +++ b/fs/crypto/fname.c
> @@ -34,12 +34,12 @@ static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
> *
> * Return: 0 on success, -errno on failure
> */
> -int fname_encrypt(struct inode *inode, const struct qstr *iname,
> +int fname_encrypt(const struct inode *inode, const struct qstr *iname,
> u8 *out, unsigned int olen)
> {
> struct skcipher_request *req = NULL;
> DECLARE_CRYPTO_WAIT(wait);
> - struct fscrypt_info *ci = inode->i_crypt_info;
> + const struct fscrypt_info *ci = inode->i_crypt_info;
> struct crypto_skcipher *tfm = ci->ci_ctfm;
> union fscrypt_iv iv;
> struct scatterlist sg;
> @@ -85,14 +85,14 @@ int fname_encrypt(struct inode *inode, const struct qstr *iname,
> *
> * Return: 0 on success, -errno on failure
> */
> -static int fname_decrypt(struct inode *inode,
> - const struct fscrypt_str *iname,
> - struct fscrypt_str *oname)
> +static int fname_decrypt(const struct inode *inode,
> + const struct fscrypt_str *iname,
> + struct fscrypt_str *oname)
> {
> struct skcipher_request *req = NULL;
> DECLARE_CRYPTO_WAIT(wait);
> struct scatterlist src_sg, dst_sg;
> - struct fscrypt_info *ci = inode->i_crypt_info;
> + const struct fscrypt_info *ci = inode->i_crypt_info;
> struct crypto_skcipher *tfm = ci->ci_ctfm;
> union fscrypt_iv iv;
> int res;
> @@ -247,10 +247,10 @@ EXPORT_SYMBOL(fscrypt_fname_free_buffer);
> *
> * Return: 0 on success, -errno on failure
> */
> -int fscrypt_fname_disk_to_usr(struct inode *inode,
> - u32 hash, u32 minor_hash,
> - const struct fscrypt_str *iname,
> - struct fscrypt_str *oname)
> +int fscrypt_fname_disk_to_usr(const struct inode *inode,
> + u32 hash, u32 minor_hash,
> + const struct fscrypt_str *iname,
> + struct fscrypt_str *oname)
> {
> const struct qstr qname = FSTR_TO_QSTR(iname);
> struct fscrypt_digested_name digested_name;
> diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h
> index 23cef4d3793a..5792ecbd4d24 100644
> --- a/fs/crypto/fscrypt_private.h
> +++ b/fs/crypto/fscrypt_private.h
> @@ -260,7 +260,7 @@ void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
> const struct fscrypt_info *ci);
>
> /* fname.c */
> -extern int fname_encrypt(struct inode *inode, const struct qstr *iname,
> +extern int fname_encrypt(const struct inode *inode, const struct qstr *iname,
> u8 *out, unsigned int olen);
> extern bool fscrypt_fname_encrypted_size(const struct inode *inode,
> u32 orig_len, u32 max_len,
> diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
> index 1a7bffe78ed5..6eaa729544a3 100644
> --- a/include/linux/fscrypt.h
> +++ b/include/linux/fscrypt.h
> @@ -153,8 +153,10 @@ static inline void fscrypt_free_filename(struct fscrypt_name *fname)
> extern int fscrypt_fname_alloc_buffer(const struct inode *, u32,
> struct fscrypt_str *);
> extern void fscrypt_fname_free_buffer(struct fscrypt_str *);
> -extern int fscrypt_fname_disk_to_usr(struct inode *, u32, u32,
> - const struct fscrypt_str *, struct fscrypt_str *);
> +extern int fscrypt_fname_disk_to_usr(const struct inode *inode,
> + u32 hash, u32 minor_hash,
> + const struct fscrypt_str *iname,
> + struct fscrypt_str *oname);
>
> #define FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE 32
>
> @@ -438,7 +440,7 @@ static inline void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
> return;
> }
>
> -static inline int fscrypt_fname_disk_to_usr(struct inode *inode,
> +static inline int fscrypt_fname_disk_to_usr(const struct inode *inode,
> u32 hash, u32 minor_hash,
> const struct fscrypt_str *iname,
> struct fscrypt_str *oname)
> --
> 2.24.1
>
Applied to fscrypt.git#master for 5.6.
- Eric
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-01-03 16:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-15 21:39 [PATCH v2] fscrypt: constify inode parameter to filename encryption functions Eric Biggers
2020-01-03 16:59 ` Eric Biggers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).