• Michael Ellerman's avatar
    powerpc/powernv: Fix missing attr initialisation in opal_export_attrs() · 83c49190
    Michael Ellerman authored
    In opal_export_attrs() we dynamically allocate some bin_attributes. They're
    allocated with kmalloc() and although we initialise most of the fields, we don't
    initialise write() or mmap(), and in particular we don't initialise the lockdep
    related fields in the embedded struct attribute.
    
    This leads to a lockdep warning at boot:
    
      BUG: key c0000000f11906d8 not in .data!
      WARNING: CPU: 0 PID: 1 at ../kernel/locking/lockdep.c:3136 lockdep_init_map+0x28c/0x2a0
      ...
      Call Trace:
        lockdep_init_map+0x288/0x2a0 (unreliable)
        __kernfs_create_file+0x8c/0x170
        sysfs_add_file_mode_ns+0xc8/0x240
        __machine_initcall_powernv_opal_init+0x60c/0x684
        do_one_initcall+0x60/0x1c0
        kernel_init_freeable+0x2f4/0x3d4
        kernel_init+0x24/0x160
        ret_from_kernel_thread+0x5c/0xb0
    
    Fix it by kzalloc'ing the attr, which fixes the uninitialised write() and
    mmap(), and calling sysfs_bin_attr_init() on it to initialise the lockdep
    fields.
    
    Fixes: 11fe909d ("powerpc/powernv: Add OPAL exports attributes to sysfs")
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    83c49190
opal.c 24.1 KB