Skip to content

Commit eb21736

Browse files
ebiggerssmfrench
authored andcommitted
ksmbd: use SHA-256 library API instead of crypto_shash API
ksmbd_gen_sd_hash() does not support any other algorithm, so the crypto_shash abstraction provides no value. Just use the SHA-256 library API instead, which is much simpler and easier to use. Signed-off-by: Eric Biggers <[email protected]> Acked-by: Namjae Jeon <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent 0ff41df commit eb21736

File tree

6 files changed

+5
-64
lines changed

6 files changed

+5
-64
lines changed

fs/smb/server/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ config SMB_SERVER
1111
select CRYPTO_HMAC
1212
select CRYPTO_ECB
1313
select CRYPTO_LIB_DES
14+
select CRYPTO_LIB_SHA256
1415
select CRYPTO_SHA256
1516
select CRYPTO_CMAC
1617
select CRYPTO_SHA512

fs/smb/server/auth.c

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -979,40 +979,6 @@ int ksmbd_gen_preauth_integrity_hash(struct ksmbd_conn *conn, char *buf,
979979
return rc;
980980
}
981981

982-
int ksmbd_gen_sd_hash(struct ksmbd_conn *conn, char *sd_buf, int len,
983-
__u8 *pi_hash)
984-
{
985-
int rc;
986-
struct ksmbd_crypto_ctx *ctx = NULL;
987-
988-
ctx = ksmbd_crypto_ctx_find_sha256();
989-
if (!ctx) {
990-
ksmbd_debug(AUTH, "could not alloc sha256\n");
991-
return -ENOMEM;
992-
}
993-
994-
rc = crypto_shash_init(CRYPTO_SHA256(ctx));
995-
if (rc) {
996-
ksmbd_debug(AUTH, "could not init shashn");
997-
goto out;
998-
}
999-
1000-
rc = crypto_shash_update(CRYPTO_SHA256(ctx), sd_buf, len);
1001-
if (rc) {
1002-
ksmbd_debug(AUTH, "could not update with n\n");
1003-
goto out;
1004-
}
1005-
1006-
rc = crypto_shash_final(CRYPTO_SHA256(ctx), pi_hash);
1007-
if (rc) {
1008-
ksmbd_debug(AUTH, "Could not generate hash err : %d\n", rc);
1009-
goto out;
1010-
}
1011-
out:
1012-
ksmbd_release_crypto_ctx(ctx);
1013-
return rc;
1014-
}
1015-
1016982
static int ksmbd_get_encryption_key(struct ksmbd_work *work, __u64 ses_id,
1017983
int enc, u8 *key)
1018984
{

fs/smb/server/auth.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,4 @@ int ksmbd_gen_smb311_encryptionkey(struct ksmbd_conn *conn,
6666
struct ksmbd_session *sess);
6767
int ksmbd_gen_preauth_integrity_hash(struct ksmbd_conn *conn, char *buf,
6868
__u8 *pi_hash);
69-
int ksmbd_gen_sd_hash(struct ksmbd_conn *conn, char *sd_buf, int len,
70-
__u8 *pi_hash);
7169
#endif

fs/smb/server/crypto_ctx.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,6 @@ static struct shash_desc *alloc_shash_desc(int id)
7575
case CRYPTO_SHASH_CMACAES:
7676
tfm = crypto_alloc_shash("cmac(aes)", 0, 0);
7777
break;
78-
case CRYPTO_SHASH_SHA256:
79-
tfm = crypto_alloc_shash("sha256", 0, 0);
80-
break;
8178
case CRYPTO_SHASH_SHA512:
8279
tfm = crypto_alloc_shash("sha512", 0, 0);
8380
break;
@@ -198,11 +195,6 @@ struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_cmacaes(void)
198195
return ____crypto_shash_ctx_find(CRYPTO_SHASH_CMACAES);
199196
}
200197

201-
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_sha256(void)
202-
{
203-
return ____crypto_shash_ctx_find(CRYPTO_SHASH_SHA256);
204-
}
205-
206198
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_sha512(void)
207199
{
208200
return ____crypto_shash_ctx_find(CRYPTO_SHASH_SHA512);

fs/smb/server/crypto_ctx.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ enum {
1313
CRYPTO_SHASH_HMACMD5 = 0,
1414
CRYPTO_SHASH_HMACSHA256,
1515
CRYPTO_SHASH_CMACAES,
16-
CRYPTO_SHASH_SHA256,
1716
CRYPTO_SHASH_SHA512,
1817
CRYPTO_SHASH_MAX,
1918
};
@@ -39,14 +38,12 @@ struct ksmbd_crypto_ctx {
3938
#define CRYPTO_HMACMD5(c) ((c)->desc[CRYPTO_SHASH_HMACMD5])
4039
#define CRYPTO_HMACSHA256(c) ((c)->desc[CRYPTO_SHASH_HMACSHA256])
4140
#define CRYPTO_CMACAES(c) ((c)->desc[CRYPTO_SHASH_CMACAES])
42-
#define CRYPTO_SHA256(c) ((c)->desc[CRYPTO_SHASH_SHA256])
4341
#define CRYPTO_SHA512(c) ((c)->desc[CRYPTO_SHASH_SHA512])
4442

4543
#define CRYPTO_HMACMD5_TFM(c) ((c)->desc[CRYPTO_SHASH_HMACMD5]->tfm)
4644
#define CRYPTO_HMACSHA256_TFM(c)\
4745
((c)->desc[CRYPTO_SHASH_HMACSHA256]->tfm)
4846
#define CRYPTO_CMACAES_TFM(c) ((c)->desc[CRYPTO_SHASH_CMACAES]->tfm)
49-
#define CRYPTO_SHA256_TFM(c) ((c)->desc[CRYPTO_SHASH_SHA256]->tfm)
5047
#define CRYPTO_SHA512_TFM(c) ((c)->desc[CRYPTO_SHASH_SHA512]->tfm)
5148

5249
#define CRYPTO_GCM(c) ((c)->ccmaes[CRYPTO_AEAD_AES_GCM])
@@ -57,7 +54,6 @@ struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_hmacmd5(void);
5754
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_hmacsha256(void);
5855
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_cmacaes(void);
5956
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_sha512(void);
60-
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_sha256(void);
6157
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_gcm(void);
6258
struct ksmbd_crypto_ctx *ksmbd_crypto_ctx_find_ccm(void);
6359
void ksmbd_crypto_destroy(void);

fs/smb/server/vfs.c

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright (C) 2018 Samsung Electronics Co., Ltd.
55
*/
66

7+
#include <crypto/sha2.h>
78
#include <linux/kernel.h>
89
#include <linux/fs.h>
910
#include <linux/filelock.h>
@@ -1476,11 +1477,7 @@ int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
14761477
acl.sd_buf = (char *)pntsd;
14771478
acl.sd_size = len;
14781479

1479-
rc = ksmbd_gen_sd_hash(conn, acl.sd_buf, acl.sd_size, acl.hash);
1480-
if (rc) {
1481-
pr_err("failed to generate hash for ndr acl\n");
1482-
return rc;
1483-
}
1480+
sha256(acl.sd_buf, acl.sd_size, acl.hash);
14841481

14851482
smb_acl = ksmbd_vfs_make_xattr_posix_acl(idmap, inode,
14861483
ACL_TYPE_ACCESS);
@@ -1495,12 +1492,7 @@ int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
14951492
goto out;
14961493
}
14971494

1498-
rc = ksmbd_gen_sd_hash(conn, acl_ndr.data, acl_ndr.offset,
1499-
acl.posix_acl_hash);
1500-
if (rc) {
1501-
pr_err("failed to generate hash for ndr acl\n");
1502-
goto out;
1503-
}
1495+
sha256(acl_ndr.data, acl_ndr.offset, acl.posix_acl_hash);
15041496

15051497
rc = ndr_encode_v4_ntacl(&sd_ndr, &acl);
15061498
if (rc) {
@@ -1557,11 +1549,7 @@ int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn,
15571549
goto out_free;
15581550
}
15591551

1560-
rc = ksmbd_gen_sd_hash(conn, acl_ndr.data, acl_ndr.offset, cmp_hash);
1561-
if (rc) {
1562-
pr_err("failed to generate hash for ndr acl\n");
1563-
goto out_free;
1564-
}
1552+
sha256(acl_ndr.data, acl_ndr.offset, cmp_hash);
15651553

15661554
if (memcmp(cmp_hash, acl.posix_acl_hash, XATTR_SD_HASH_SIZE)) {
15671555
pr_err("hash value diff\n");

0 commit comments

Comments
 (0)