On 2019/1/14 22:05, Sheng Yong wrote:
> When setting /sys/fs/f2fs/<DEV>/iostat_enable with non-boolean value,
> UBSAN reports the following warning.
> 
> [ 7562.295484] 
> ================================================================================
> [ 7562.296531] UBSAN: Undefined behaviour in fs/f2fs/f2fs.h:2776:10
> [ 7562.297651] load of value 64 is not a valid value for type '_Bool'
> [ 7562.298642] CPU: 1 PID: 7487 Comm: dd Not tainted 4.20.0-rc4+ #79
> [ 7562.298653] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS 
> VirtualBox 12/01/2006
> [ 7562.298662] Call Trace:
> [ 7562.298760]  dump_stack+0x46/0x5b
> [ 7562.298811]  ubsan_epilogue+0x9/0x40
> [ 7562.298830]  __ubsan_handle_load_invalid_value+0x72/0x90
> [ 7562.298863]  f2fs_file_write_iter+0x29f/0x3f0
> [ 7562.298905]  __vfs_write+0x115/0x160
> [ 7562.298922]  vfs_write+0xa7/0x190
> [ 7562.298934]  ksys_write+0x50/0xc0
> [ 7562.298973]  do_syscall_64+0x4a/0xe0
> [ 7562.298992]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
> [ 7562.299001] RIP: 0033:0x7fa45ec19c00
> [ 7562.299004] Code: 73 01 c3 48 8b 0d 88 92 2c 00 f7 d8 64 89 01 48 83 c8 ff 
> c3 66 0f 1f 44 00 00 83 3d dd eb 2c 00 00 75 10 b8 01 00 00 00 0f 05 <48> 3d 
> 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 ce 8f 01 00 48 89 04 24
> [ 7562.299044] RSP: 002b:00007ffca52b49e8 EFLAGS: 00000246 ORIG_RAX: 
> 0000000000000001
> [ 7562.299052] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 
> 00007fa45ec19c00
> [ 7562.299059] RDX: 0000000000000400 RSI: 000000000093f000 RDI: 
> 0000000000000001
> [ 7562.299065] RBP: 000000000093f000 R08: 0000000000000004 R09: 
> 0000000000000000
> [ 7562.299071] R10: 00007ffca52b47b0 R11: 0000000000000246 R12: 
> 0000000000000400
> [ 7562.299077] R13: 000000000093f000 R14: 000000000093f400 R15: 
> 0000000000000000
> [ 7562.299091] 
> ================================================================================
> 
> So, if iostat_enable is enabled, set its value as `true'.
> 
> Signed-off-by: Sheng Yong <shengyo...@huawei.com>
> ---
>  fs/f2fs/sysfs.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 0575edbe3ed6..b192627742a9 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -278,10 +278,17 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
>               return count;
>       }
>  
> -     *ui = t;
>  
> -     if (!strcmp(a->attr.name, "iostat_enable") && *ui == 0)
> -             f2fs_reset_iostat(sbi);
> +     if (!strcmp(a->attr.name, "iostat_enable")) {

                bool enable = !!*ui;

                if (!enable)
                        f2fs_reset_iostat(sbi);
                sbi->iostat_enable = enable;

                return count;

> +             if (t == 0)
> +                     f2fs_reset_iostat(sbi);
> +             else
> +                     sbi->iostat_enable = true;
> +             return count;
> +     }
> +
> +     *ui = (unsigned int)t;
> +
>       return count;
>  }
>  
> 



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to