• Artem Labazov's avatar
    exfat: Avoid allocating upcase table using kcalloc() · 9eb78c25
    Artem Labazov authored
    The table for Unicode upcase conversion requires an order-5 allocation,
    which may fail on a highly-fragmented system:
    
     pool-udisksd: page allocation failure: order:5,
     mode:0x40dc0(GFP_KERNEL|__GFP_COMP|__GFP_ZERO), nodemask=(null),
     cpuset=/,mems_allowed=0
     CPU: 4 PID: 3756880 Comm: pool-udisksd Tainted: G U
     5.8.10-200.fc32.x86_64 #1
     Hardware name: Dell Inc. XPS 13 9360/0PVG6D, BIOS 2.13.0 11/14/2019
     Call Trace:
      dump_stack+0x6b/0x88
      warn_alloc.cold+0x75/0xd9
      ? _cond_resched+0x16/0x40
      ? __alloc_pages_direct_compact+0x144/0x150
      __alloc_pages_slowpath.constprop.0+0xcfa/0xd30
      ? __schedule+0x28a/0x840
      ? __wait_on_bit_lock+0x92/0xa0
      __alloc_pages_nodemask+0x2df/0x320
      kmalloc_order+0x1b/0x80
      kmalloc_order_trace+0x1d/0xa0
      exfat_create_upcase_table+0x115/0x390 [exfat]
      exfat_fill_super+0x3ef/0x7f0 [exfat]
      ? sget_fc+0x1d0/0x240
      ? exfat_init_fs_context+0x120/0x120 [exfat]
      get_tree_bdev+0x15c/0x250
      vfs_get_tree+0x25/0xb0
      do_mount+0x7c3/0xaf0
      ? copy_mount_options+0xab/0x180
      __x64_sys_mount+0x8e/0xd0
      do_syscall_64+0x4d/0x90
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Make the driver use kvcalloc() to eliminate the issue.
    
    Fixes: 370e812b ("exfat: add nls operations")
    Cc: stable@vger.kernel.org #v5.7+
    Signed-off-by: default avatarArtem Labazov <123321artyom@gmail.com>
    Signed-off-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
    9eb78c25
nls.c 33.3 KB