2023-03-04 08:36:14

by Mingyi Cong

[permalink] [raw]
Subject: [PATCH] fs: add the tuncate check of exfat and hfsplus

From: Mingyi Cong <[email protected]>

EXFAT and HFSPLUS will fill zero data in truncated range.
Fix this by adding *_SUPER_MAGIC check.

Signed-off-by: Mingyi Cong <[email protected]>
---
fs/ksmbd/smb2pdu.c | 4 +++-
include/uapi/linux/magic.h | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index ac029dfd2..10ab929ad 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -5738,7 +5738,9 @@ static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp,
* truncate of some filesystem like FAT32 fill zero data in
* truncated range.
*/
- if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
+ if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != EXFAT_SUPER_MAGIC ||
+ inode->i_sb->s_magic != HFSPLUS_SUPER_MAGIC) {
ksmbd_debug(SMB, "filename : %s truncated to newsize %lld\n",
fp->filename, newsize);
rc = ksmbd_vfs_truncate(work, fp, newsize);
diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
index 35687dcb1..687b7f584 100644
--- a/include/uapi/linux/magic.h
+++ b/include/uapi/linux/magic.h
@@ -43,6 +43,8 @@
#define MINIX3_SUPER_MAGIC 0x4d5a /* minix v3 fs, 60 char names */

#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
+#define EXFAT_SUPER_MAGIC 0x2011BAB0UL /* EXFAT */
+#define HFSPLUS_SUPER_MAGIC 0x482b /* HFSPLUS */
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
#define NFS_SUPER_MAGIC 0x6969
#define OCFS2_SUPER_MAGIC 0x7461636f
--
2.34.1



2023-03-07 09:38:41

by Namjae Jeon

[permalink] [raw]
Subject: Re: [PATCH] fs: add the tuncate check of exfat and hfsplus

2023-03-04 17:35 GMT+09:00, MIngyi Cong <[email protected]>:
> From: Mingyi Cong <[email protected]>
>
> EXFAT and HFSPLUS will fill zero data in truncated range.
> Fix this by adding *_SUPER_MAGIC check.
>
> Signed-off-by: Mingyi Cong <[email protected]>
> ---
> fs/ksmbd/smb2pdu.c | 4 +++-
> include/uapi/linux/magic.h | 2 ++
> 2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
> index ac029dfd2..10ab929ad 100644
> --- a/fs/ksmbd/smb2pdu.c
> +++ b/fs/ksmbd/smb2pdu.c
> @@ -5738,7 +5738,9 @@ static int set_end_of_file_info(struct ksmbd_work
> *work, struct ksmbd_file *fp,
> * truncate of some filesystem like FAT32 fill zero data in
> * truncated range.
> */
> - if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
> + if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
> + inode->i_sb->s_magic != EXFAT_SUPER_MAGIC ||
> + inode->i_sb->s_magic != HFSPLUS_SUPER_MAGIC) {
> ksmbd_debug(SMB, "filename : %s truncated to newsize %lld\n",
> fp->filename, newsize);
> rc = ksmbd_vfs_truncate(work, fp, newsize);
> diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
> index 35687dcb1..687b7f584 100644
> --- a/include/uapi/linux/magic.h
> +++ b/include/uapi/linux/magic.h
> @@ -43,6 +43,8 @@
> #define MINIX3_SUPER_MAGIC 0x4d5a /* minix v3 fs, 60 char names */
>
> #define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
> +#define EXFAT_SUPER_MAGIC 0x2011BAB0UL /* EXFAT */
EXFAT_SUPER_MAGIC is already here. Please check it.

> +#define HFSPLUS_SUPER_MAGIC 0x482b /* HFSPLUS */
Is there no need to add HFS magic?

> #define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
> #define NFS_SUPER_MAGIC 0x6969
> #define OCFS2_SUPER_MAGIC 0x7461636f
> --
> 2.34.1
>
>

2023-03-07 13:57:53

by Mingyi Cong

[permalink] [raw]
Subject: [PATCH v2] fs: add the tuncate check of hfs, exfat and hfsplus

HFS, EXFAT and HFSPLUS will fill zero data in truncated range.
Fix this by adding *_SUPER_MAGIC check.

Signed-off-by: MIngyi Cong <[email protected]>
---
V1 -> V2: add the truncate check of hfs and remove EXFAT_SUPER_MAGIC in magic.h
fs/ksmbd/smb2pdu.c | 5 ++++-
include/uapi/linux/magic.h | 2 ++
2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 0685c1c77b9f..881a2b37fab0 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -5746,7 +5746,10 @@ static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp,
* truncate of some filesystem like FAT32 fill zero data in
* truncated range.
*/
- if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
+ if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != EXFAT_SUPER_MAGIC ||
+ inode->i_sb->s_magic != HFSPLUS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != HFS_SUPER_MAGIC) {
ksmbd_debug(SMB, "truncated to newsize %lld\n", newsize);
rc = ksmbd_vfs_truncate(work, fp, newsize);
if (rc) {
diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
index 6325d1d0e90f..db2c81755025 100644
--- a/include/uapi/linux/magic.h
+++ b/include/uapi/linux/magic.h
@@ -46,6 +46,8 @@

#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
#define EXFAT_SUPER_MAGIC 0x2011BAB0
+#define HFSPLUS_SUPER_MAGIC 0x482b /* HFSPLUS */
+#define HFS_SUPER_MAGIC 0x4244 /* "BD": HFS MDB (super block) */
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
#define NFS_SUPER_MAGIC 0x6969
#define OCFS2_SUPER_MAGIC 0x7461636f
--
2.34.1


2023-03-16 14:28:22

by Mingyi Cong

[permalink] [raw]
Subject: [PATCH v3] fs: add the tuncate check of exfat

EXFAT will fill zero data in truncated range.
Fix this by adding EXFAT_SUPER_MAGIC check.

Signed-off-by: MIngyi Cong <[email protected]>
---
V1 -> V2: add the truncate check of hfs and remove EXFAT_SUPER_MAGIC in magic.h
V2 -> V3: remove the truncate check of hfs and hfsplus
fs/ksmbd/smb2pdu.c | 3 ++-
include/uapi/linux/magic.h | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 0685c1c77b9f..3f2e34936b8d 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -5746,7 +5746,8 @@ static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp,
* truncate of some filesystem like FAT32 fill zero data in
* truncated range.
*/
- if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
+ if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != EXFAT_SUPER_MAGIC) {
ksmbd_debug(SMB, "truncated to newsize %lld\n", newsize);
rc = ksmbd_vfs_truncate(work, fp, newsize);
if (rc) {
diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
index 6325d1d0e90f..309cb3b5c5c4 100644
--- a/include/uapi/linux/magic.h
+++ b/include/uapi/linux/magic.h
@@ -46,6 +46,7 @@

#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
#define EXFAT_SUPER_MAGIC 0x2011BAB0
+#define HFS_SUPER_MAGIC 0x4244 /* "BD": HFS MDB (super block) */
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
#define NFS_SUPER_MAGIC 0x6969
#define OCFS2_SUPER_MAGIC 0x7461636f
--
2.34.1


2023-03-16 14:36:19

by Mingyi Cong

[permalink] [raw]
Subject: [PATCH v3] fs: add the tuncate check of exfat

EXFAT will fill zero data in truncated range.
Fix this by adding EXFAT_SUPER_MAGIC check.

Signed-off-by: MIngyi Cong <[email protected]>
---
V1 -> V2: add the truncate check of hfs and remove EXFAT_SUPER_MAGIC in magic.h
V2 -> V3: remove the truncate check of hfs and hfsplus
fs/ksmbd/smb2pdu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 0685c1c77b9f..3f2e34936b8d 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -5746,7 +5746,8 @@ static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp,
* truncate of some filesystem like FAT32 fill zero data in
* truncated range.
*/
- if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
+ if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != EXFAT_SUPER_MAGIC) {
ksmbd_debug(SMB, "truncated to newsize %lld\n", newsize);
rc = ksmbd_vfs_truncate(work, fp, newsize);
if (rc) {
--
2.34.1


2023-03-16 14:45:32

by Mingyi Cong

[permalink] [raw]
Subject: [PATCH v3] fs: add the tuncate check of exfat

EXFAT will fill zero data in truncated range.
Fix this by adding EXFAT_SUPER_MAGIC check.

Signed-off-by: MIngyi Cong <[email protected]>
---
V1 -> V2: add the truncate check of hfs and remove EXFAT_SUPER_MAGIC in magic.h
V2 -> V3: remove the truncate check of hfs and hfsplus
fs/ksmbd/smb2pdu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 0685c1c77b9f..3f2e34936b8d 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -5746,7 +5746,8 @@ static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp,
* truncate of some filesystem like FAT32 fill zero data in
* truncated range.
*/
- if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
+ if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != EXFAT_SUPER_MAGIC) {
ksmbd_debug(SMB, "truncated to newsize %lld\n", newsize);
rc = ksmbd_vfs_truncate(work, fp, newsize);
if (rc) {
--
2.34.1


2023-03-16 14:47:46

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH v3] fs: add the tuncate check of exfat

On Thu, Mar 16, 2023 at 10:27:53PM +0800, MIngyi Cong wrote:
> EXFAT will fill zero data in truncated range.
> Fix this by adding EXFAT_SUPER_MAGIC check.

None of these is correct. We need to find a way to communicate
this information without looking at magic numbers.

2023-03-20 13:45:35

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH v3] fs: add the tuncate check of exfat

On Thu, Mar 16, 2023 at 11:15:10PM +0800, Mingyi Cong wrote:
> After my analysis, the reason is that the truncate system call of some file
> systems will be filled with 0 data. We should add some conditional
> judgments to avoid the use of some file systems for truncate. Do you have a
> better suggestion for revision?

As Ń•aid we need a flag, be that per-file system or per-inode to flag
the behavior instead of guessing it from the major number.

2023-03-28 13:26:10

by Mingyi Cong

[permalink] [raw]
Subject: [PATCH v3] fs: add the tuncate check of exfat

From: MIngyi Cong <[email protected]>

EXFAT will fill zero data in truncated range.
Fix this by adding EXFAT_SUPER_MAGIC check.

Signed-off-by: MIngyi Cong <[email protected]>
---
fs/ksmbd/smb2pdu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 0685c1c77b9f..3f2e34936b8d 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -5746,7 +5746,8 @@ static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp,
* truncate of some filesystem like FAT32 fill zero data in
* truncated range.
*/
- if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC) {
+ if (inode->i_sb->s_magic != MSDOS_SUPER_MAGIC ||
+ inode->i_sb->s_magic != EXFAT_SUPER_MAGIC) {
ksmbd_debug(SMB, "truncated to newsize %lld\n", newsize);
rc = ksmbd_vfs_truncate(work, fp, newsize);
if (rc) {
--
2.34.1

2023-03-28 23:57:18

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH v3] fs: add the tuncate check of exfat

NAK again. You must not hardcode file syste magic numbers in
consumers of vfs API. Not the existing one, and absolutelt not
a new one. I told you a few times what to do but you keep ignoring it.