1. 02 May, 2022 3 commits
    • Alexander Aring's avatar
      dlm: use kref_put_lock in put_rsb · 9502a7f6
      Alexander Aring authored
      This patch will optimize put_rsb() by using kref_put_lock(). The
      function kref_put_lock() will only take the lock if the reference is
      going to be zero, if not the lock will never be held.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      9502a7f6
    • Alexander Aring's avatar
      dlm: remove unnecessary error assign · 0ccc1060
      Alexander Aring authored
      This patch removes unnecessary error assigns to 0 at places we know that
      error is zero because it was checked on non-zero before.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      0ccc1060
    • Alexander Aring's avatar
      dlm: fix missing lkb refcount handling · 1689c169
      Alexander Aring authored
      We always call hold_lkb(lkb) if we increment lkb->lkb_wait_count.
      So, we always need to call unhold_lkb(lkb) if we decrement
      lkb->lkb_wait_count. This patch will add missing unhold_lkb(lkb) if we
      decrement lkb->lkb_wait_count. In case of setting lkb->lkb_wait_count to
      zero we need to countdown until reaching zero and call unhold_lkb(lkb).
      The waiters list unhold_lkb(lkb) can be removed because it's done for
      the last lkb_wait_count decrement iteration as it's done in
      _remove_from_waiters().
      
      This issue was discovered by a dlm gfs2 test case which use excessively
      dlm_unlock(LKF_CANCEL) feature. Probably the lkb->lkb_wait_count value
      never reached above 1 if this feature isn't used and so it was not
      discovered before.
      
      The testcase ended in a rsb on the rsb keep data structure with a
      refcount of 1 but no lkb was associated with it, which is itself
      an invalid behaviour. A side effect of that was a condition in which
      the dlm was sending remove messages in a looping behaviour. With this
      patch that has not been reproduced.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      1689c169
  2. 07 Apr, 2022 1 commit
    • Alexander Aring's avatar
      fs: dlm: cast resource pointer to uintptr_t · e425ac99
      Alexander Aring authored
      This patch fixes the following warning when doing a 32 bit kernel build
      when pointers are 4 byte long:
      
      In file included from ./include/linux/byteorder/little_endian.h:5,
                       from ./arch/x86/include/uapi/asm/byteorder.h:5,
                       from ./include/asm-generic/qrwlock_types.h:6,
                       from ./arch/x86/include/asm/spinlock_types.h:7,
                       from ./include/linux/spinlock_types_raw.h:7,
                       from ./include/linux/ratelimit_types.h:7,
                       from ./include/linux/printk.h:10,
                       from ./include/asm-generic/bug.h:22,
                       from ./arch/x86/include/asm/bug.h:87,
                       from ./include/linux/bug.h:5,
                       from ./include/linux/mmdebug.h:5,
                       from ./include/linux/gfp.h:5,
                       from ./include/linux/slab.h:15,
                       from fs/dlm/dlm_internal.h:19,
                       from fs/dlm/rcom.c:12:
      fs/dlm/rcom.c: In function ‘dlm_send_rcom_lock’:
      ./include/uapi/linux/byteorder/little_endian.h:32:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
       #define __cpu_to_le64(x) ((__force __le64)(__u64)(x))
                                                 ^
      ./include/linux/byteorder/generic.h:86:21: note: in expansion of macro ‘__cpu_to_le64’
       #define cpu_to_le64 __cpu_to_le64
                           ^~~~~~~~~~~~~
      fs/dlm/rcom.c:457:14: note: in expansion of macro ‘cpu_to_le64’
        rc->rc_id = cpu_to_le64(r);
      
      The rc_id value in dlm rcom is handled as u64. The rcom implementation
      uses for an unique number generation the pointer value of the used
      dlm_rsb instance. However if the pointer value is 4 bytes long
      -Wpointer-to-int-cast will print a warning. We get rid of that warning
      to cast the pointer to uintptr_t which is either 4 or 8 bytes. There
      might be a very unlikely case where this number isn't unique anymore if
      using dlm in a mixed cluster of nodes and sizeof(uintptr_t) returns 4 and
      8.
      
      However this problem was already been there and this patch should get
      rid of the warning.
      
      Fixes: 2f9dbeda ("dlm: use __le types for rcom messages")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      e425ac99
  3. 06 Apr, 2022 23 commits
    • Jakob Koschel's avatar
      dlm: replace usage of found with dedicated list iterator variable · dc1acd5c
      Jakob Koschel authored
      To move the list iterator variable into the list_for_each_entry_*()
      macro in the future it should be avoided to use the list iterator
      variable after the loop body.
      
      To *never* use the list iterator variable after the loop it was
      concluded to use a separate iterator variable instead of a
      found boolean [1].
      
      This removes the need to use a found variable and simply checking if
      the variable was set, can determine if the break/goto was hit.
      
      Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1]
      Signed-off-by: default avatarJakob Koschel <jakobkoschel@gmail.com>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      dc1acd5c
    • Jakob Koschel's avatar
      dlm: remove usage of list iterator for list_add() after the loop body · c490b3af
      Jakob Koschel authored
      In preparation to limit the scope of a list iterator to the list
      traversal loop, use a dedicated pointer to point to the found element [1].
      
      Before, the code implicitly used the head when no element was found
      when using &pos->list. Since the new variable is only set if an
      element was found, the list_add() is performed within the loop
      and only done after the loop if it is done on the list head directly.
      
      Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1]
      Signed-off-by: default avatarJakob Koschel <jakobkoschel@gmail.com>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      c490b3af
    • Alexander Aring's avatar
      dlm: fix pending remove if msg allocation fails · ba589959
      Alexander Aring authored
      This patch unsets ls_remove_len and ls_remove_name if a message
      allocation of a remove messages fails. In this case we never send a
      remove message out but set the per ls ls_remove_len ls_remove_name
      variable for a pending remove. Unset those variable should indicate
      possible waiters in wait_pending_remove() that no pending remove is
      going on at this moment.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      ba589959
    • Alexander Aring's avatar
      dlm: fix wake_up() calls for pending remove · f6f74183
      Alexander Aring authored
      This patch move the wake_up() call at the point when a remove message
      completed. Before it was only when a remove message was going to be
      sent. The possible waiter in wait_pending_remove() waits until a remove
      is done if the resource name matches with the per ls variable
      ls->ls_remove_name. If this is the case we must wait until a pending
      remove is done which is indicated if DLM_WAIT_PENDING_COND() returns
      false which will always be the case when ls_remove_len and
      ls_remove_name are unset to indicate that a remove is not going on
      anymore.
      
      Fixes: 21d9ac1a ("fs: dlm: use event based wait for pending remove")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      f6f74183
    • Alexander Aring's avatar
      dlm: check required context while close · 2c3fa6ae
      Alexander Aring authored
      This patch adds a WARN_ON() check to validate the right context while
      dlm_midcomms_close() is called. Even before commit 489d8e55
      ("fs: dlm: add reliable connection if reconnect") in this context
      dlm_lowcomms_close() flushes all ongoing transmission triggered by dlm
      application stack. If we do that, it's required that no new message will
      be triggered by the dlm application stack. The function
      dlm_midcomms_close() is not called often so we can check if all
      lockspaces are in such context.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      2c3fa6ae
    • Alexander Aring's avatar
      dlm: cleanup lock handling in dlm_master_lookup · 40159748
      Alexander Aring authored
      This patch will remove the following warning by sparse:
      
      fs/dlm/lock.c:1049:9: warning: context imbalance in 'dlm_master_lookup' - different lock contexts for basic block
      
      I tried to find any issues with the current handling and I did not find
      any. However it is hard to follow the lock handling in this area of
      dlm_master_lookup() and I suppose that sparse cannot realize that there
      are no issues. The variable "toss_list" makes it really hard to follow
      the lock handling because if it's set the rsb lock/refcount isn't held
      but the ls->ls_rsbtbl[b].lock is held and this is one reason why the rsb
      lock/refcount does not need to be held. If it's not set the
      ls->ls_rsbtbl[b].lock is not held but the rsb lock/refcount is held. The
      indicator of toss_list will be used to store the actual lock state.
      Another possibility is that a retry can happen and then it's hard to
      follow the specific code part. I did not find any issues but sparse
      cannot realize that there are no issues.
      
      To make it more easier to understand for developers and sparse as well,
      we remove the toss_list variable which indicates a specific lock state
      and move handling in between of this lock state in a separate function.
      This function can be called now in case when the initial lock states are
      taken which was previously signalled if toss_list was set or not. The
      advantage here is that we can release all locks/refcounts in mostly the
      same code block as it was taken.
      
      Afterwards sparse had no issues to figure out that there are no problems
      with the current lock behaviour.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      40159748
    • Alexander Aring's avatar
      dlm: remove found label in dlm_master_lookup · e91ce03b
      Alexander Aring authored
      This patch cleanups a not necessary label found which can be replaced by
      a proper else handling to jump over a specific code block.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      e91ce03b
    • Alexander Aring's avatar
      dlm: remove __user conversion warnings · c087eabd
      Alexander Aring authored
      This patch avoids the following sparse warning:
      
      fs/dlm/user.c:111:38: warning: incorrect type in assignment (different address spaces)
      fs/dlm/user.c:111:38:    expected void [noderef] __user *castparam
      fs/dlm/user.c:111:38:    got void *
      fs/dlm/user.c:112:37: warning: incorrect type in assignment (different address spaces)
      fs/dlm/user.c:112:37:    expected void [noderef] __user *castaddr
      fs/dlm/user.c:112:37:    got void *
      fs/dlm/user.c:113:38: warning: incorrect type in assignment (different address spaces)
      fs/dlm/user.c:113:38:    expected void [noderef] __user *bastparam
      fs/dlm/user.c:113:38:    got void *
      fs/dlm/user.c:114:37: warning: incorrect type in assignment (different address spaces)
      fs/dlm/user.c:114:37:    expected void [noderef] __user *bastaddr
      fs/dlm/user.c:114:37:    got void *
      fs/dlm/user.c:115:33: warning: incorrect type in assignment (different address spaces)
      fs/dlm/user.c:115:33:    expected struct dlm_lksb [noderef] __user *lksb
      fs/dlm/user.c:115:33:    got void *
      fs/dlm/user.c:130:39: warning: cast removes address space '__user' of expression
      fs/dlm/user.c:131:40: warning: cast removes address space '__user' of expression
      fs/dlm/user.c:132:36: warning: cast removes address space '__user' of expression
      
      So far I see there is no direct handling of copying a pointer value to
      another pointer value. The handling only copies the actual pointer
      address to a scalar type or vice versa. This should be okay because it
      never handles dereferencing anything of those addresses in the kernel
      space. To get rid of those warnings we doing some different casting
      which results in no warnings in sparse or compiler.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      c087eabd
    • Alexander Aring's avatar
      dlm: move conversion to compile time · 14a92fd7
      Alexander Aring authored
      This patch is a cleanup to move the byte order conversion to compile
      time. In a simple comparison like this it's possible to move it to
      static values so the compiler will always convert those values at
      compile time.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      14a92fd7
    • Alexander Aring's avatar
      dlm: use __le types for dlm messages · 00e99ccd
      Alexander Aring authored
      This patch changes to use __le types directly in the dlm message
      structure which is casted at the right dlm message buffer positions.
      
      The main goal what is reached here is to remove sparse warnings
      regarding to host to little byte order conversion or vice versa. Leaving
      those sparse issues ignored and always do it in out/in functionality
      tends to leave it unknown in which byte order the variable is being
      handled.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      00e99ccd
    • Alexander Aring's avatar
      dlm: use __le types for rcom messages · 2f9dbeda
      Alexander Aring authored
      This patch changes to use __le types directly in the dlm rcom
      structure which is casted at the right dlm message buffer positions.
      
      The main goal what is reached here is to remove sparse warnings
      regarding to host to little byte order conversion or vice versa. Leaving
      those sparse issues ignored and always do it in out/in functionality
      tends to leave it unknown in which byte order the variable is being
      handled.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      2f9dbeda
    • Alexander Aring's avatar
      dlm: use __le types for dlm header · 3428785a
      Alexander Aring authored
      This patch changes to use __le types directly in the dlm header
      structure which is casted at the right dlm message buffer positions.
      
      The main goal what is reached here is to remove sparse warnings
      regarding to host to little byte order conversion or vice versa. Leaving
      those sparse issues ignored and always do it in out/in functionality
      tends to leave it unknown in which byte order the variable is being
      handled.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      3428785a
    • Alexander Aring's avatar
      dlm: use __le types for options header · d9efd005
      Alexander Aring authored
      This patch changes to use __le types directly in the dlm option headers
      structures which are casted at the right dlm message buffer positions.
      
      Currently only midcomms.c using those headers which already was calling
      endian conversions on-the-fly without using in/out functionality like
      other endianness handling in dlm. Using __le types now will hopefully get
      useful warnings in future if we do comparison against host byte order
      values.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      d9efd005
    • Alexander Aring's avatar
      dlm: add __CHECKER__ for false positives · a8449f23
      Alexander Aring authored
      This patch will adds #ifndef __CHECKER__ for false positives warnings
      about an imbalance lock/unlock srcu handling. Which are shown by running
      sparse checks:
      
      fs/dlm/midcomms.c:1065:20: warning: context imbalance in 'dlm_midcomms_get_mhandle' - wrong count at exit
      
      Using __CHECKER__ will tell sparse to ignore these sections.
      
      Those imbalances are false positive because from upper layer it is
      always required to call a function in sequence, e.g. if
      dlm_midcomms_get_mhandle() is successful there must be a
      dlm_midcomms_commit_mhandle() call afterwards.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      a8449f23
    • Alexander Aring's avatar
      dlm: move global to static inits · 314a5540
      Alexander Aring authored
      Instead of init global module at module loading time we can move the
      initialization of those global variables at memory initialization of the
      module loader.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      314a5540
    • Alexander Aring's avatar
      dlm: remove unnecessary INIT_LIST_HEAD() · 16d58904
      Alexander Aring authored
      There is no need to call INIT_LIST_HEAD() when it's set directly
      afterwards by list_add_tail().
      Reported-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      16d58904
    • Alexander Aring's avatar
      dlm: improve plock logging if interrupted · bcfad426
      Alexander Aring authored
      This patch changes the log level if a plock is removed when interrupted
      from debug to info. Additional it signals now that the plock entity was
      removed to let the user know what's happening.
      
      If on a dev_write() a pending plock cannot be find it will signal that
      it might have been removed because wait interruption.
      
      Before this patch there might be a "dev_write no op ..." info message
      and the users can only guess that the plock was removed before because
      the wait interruption. To be sure that is the case we log both messages
      on the same log level.
      
      Let both message be logged on info layer because it should not happened
      a lot and if it happens it should be clear why the op was not found.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      bcfad426
    • Alexander Aring's avatar
      dlm: rearrange async condition return · a800ba77
      Alexander Aring authored
      This patch moves the return of FILE_LOCK_DEFERRED a little bit earlier
      than checking afterwards again if the request was an asynchronous request.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      a800ba77
    • Alexander Aring's avatar
      dlm: cleanup plock_op vs plock_xop · bcbb4ba6
      Alexander Aring authored
      Lately the different casting between plock_op and plock_xop and list
      holders which was involved showed some issues which were hard to see.
      This patch removes the "plock_xop" structure and introduces a
      "struct plock_async_data". This structure will be set in "struct plock_op"
      in case of asynchronous lock handling as the original "plock_xop" was
      made for. There is no need anymore to cast pointers around for
      additional fields in case of asynchronous lock handling.  As disadvantage
      another allocation was introduces but only needed in the asynchronous
      case which is currently only used in combination with nfs lockd.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      bcbb4ba6
    • Alexander Aring's avatar
      dlm: replace sanity checks with WARN_ON · a559790c
      Alexander Aring authored
      There are several sanity checks and recover handling if they occur in
      the dlm plock handling. From my understanding those operation can't run
      in parallel with any list manipulation which involved setting the list
      holder of plock_op, if so we have a bug which this sanity check will
      warn about. Previously if such sanity check occurred the dlm plock
      handling was trying to recover from it by deleting the plock_op from a
      list which the holder was set to. However there is a bug in the dlm
      plock handling if this case ever happens. To make such bugs are more
      visible for further investigations we add a WARN_ON() on those sanity
      checks and remove the recovering handling because other possible side
      effects.
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      a559790c
    • Alexander Aring's avatar
      dlm: fix plock invalid read · 42252d0d
      Alexander Aring authored
      This patch fixes an invalid read showed by KASAN. A unlock will allocate a
      "struct plock_op" and a followed send_op() will append it to a global
      send_list data structure. In some cases a followed dev_read() moves it
      to recv_list and dev_write() will cast it to "struct plock_xop" and access
      fields which are only available in those structures. At this point an
      invalid read happens by accessing those fields.
      
      To fix this issue the "callback" field is moved to "struct plock_op" to
      indicate that a cast to "plock_xop" is allowed and does the additional
      "plock_xop" handling if set.
      
      Example of the KASAN output which showed the invalid read:
      
      [ 2064.296453] ==================================================================
      [ 2064.304852] BUG: KASAN: slab-out-of-bounds in dev_write+0x52b/0x5a0 [dlm]
      [ 2064.306491] Read of size 8 at addr ffff88800ef227d8 by task dlm_controld/7484
      [ 2064.308168]
      [ 2064.308575] CPU: 0 PID: 7484 Comm: dlm_controld Kdump: loaded Not tainted 5.14.0+ #9
      [ 2064.310292] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
      [ 2064.311618] Call Trace:
      [ 2064.312218]  dump_stack_lvl+0x56/0x7b
      [ 2064.313150]  print_address_description.constprop.8+0x21/0x150
      [ 2064.314578]  ? dev_write+0x52b/0x5a0 [dlm]
      [ 2064.315610]  ? dev_write+0x52b/0x5a0 [dlm]
      [ 2064.316595]  kasan_report.cold.14+0x7f/0x11b
      [ 2064.317674]  ? dev_write+0x52b/0x5a0 [dlm]
      [ 2064.318687]  dev_write+0x52b/0x5a0 [dlm]
      [ 2064.319629]  ? dev_read+0x4a0/0x4a0 [dlm]
      [ 2064.320713]  ? bpf_lsm_kernfs_init_security+0x10/0x10
      [ 2064.321926]  vfs_write+0x17e/0x930
      [ 2064.322769]  ? __fget_light+0x1aa/0x220
      [ 2064.323753]  ksys_write+0xf1/0x1c0
      [ 2064.324548]  ? __ia32_sys_read+0xb0/0xb0
      [ 2064.325464]  do_syscall_64+0x3a/0x80
      [ 2064.326387]  entry_SYSCALL_64_after_hwframe+0x44/0xae
      [ 2064.327606] RIP: 0033:0x7f807e4ba96f
      [ 2064.328470] Code: 89 54 24 18 48 89 74 24 10 89 7c 24 08 e8 39 87 f8 ff 48 8b 54 24 18 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 31 44 89 c7 48 89 44 24 08 e8 7c 87 f8 ff 48
      [ 2064.332902] RSP: 002b:00007ffd50cfe6e0 EFLAGS: 00000293 ORIG_RAX: 0000000000000001
      [ 2064.334658] RAX: ffffffffffffffda RBX: 000055cc3886eb30 RCX: 00007f807e4ba96f
      [ 2064.336275] RDX: 0000000000000040 RSI: 00007ffd50cfe7e0 RDI: 0000000000000010
      [ 2064.337980] RBP: 00007ffd50cfe7e0 R08: 0000000000000000 R09: 0000000000000001
      [ 2064.339560] R10: 000055cc3886eb30 R11: 0000000000000293 R12: 000055cc3886eb80
      [ 2064.341237] R13: 000055cc3886eb00 R14: 000055cc3886f590 R15: 0000000000000001
      [ 2064.342857]
      [ 2064.343226] Allocated by task 12438:
      [ 2064.344057]  kasan_save_stack+0x1c/0x40
      [ 2064.345079]  __kasan_kmalloc+0x84/0xa0
      [ 2064.345933]  kmem_cache_alloc_trace+0x13b/0x220
      [ 2064.346953]  dlm_posix_unlock+0xec/0x720 [dlm]
      [ 2064.348811]  do_lock_file_wait.part.32+0xca/0x1d0
      [ 2064.351070]  fcntl_setlk+0x281/0xbc0
      [ 2064.352879]  do_fcntl+0x5e4/0xfe0
      [ 2064.354657]  __x64_sys_fcntl+0x11f/0x170
      [ 2064.356550]  do_syscall_64+0x3a/0x80
      [ 2064.358259]  entry_SYSCALL_64_after_hwframe+0x44/0xae
      [ 2064.360745]
      [ 2064.361511] Last potentially related work creation:
      [ 2064.363957]  kasan_save_stack+0x1c/0x40
      [ 2064.365811]  __kasan_record_aux_stack+0xaf/0xc0
      [ 2064.368100]  call_rcu+0x11b/0xf70
      [ 2064.369785]  dlm_process_incoming_buffer+0x47d/0xfd0 [dlm]
      [ 2064.372404]  receive_from_sock+0x290/0x770 [dlm]
      [ 2064.374607]  process_recv_sockets+0x32/0x40 [dlm]
      [ 2064.377290]  process_one_work+0x9a8/0x16e0
      [ 2064.379357]  worker_thread+0x87/0xbf0
      [ 2064.381188]  kthread+0x3ac/0x490
      [ 2064.383460]  ret_from_fork+0x22/0x30
      [ 2064.385588]
      [ 2064.386518] Second to last potentially related work creation:
      [ 2064.389219]  kasan_save_stack+0x1c/0x40
      [ 2064.391043]  __kasan_record_aux_stack+0xaf/0xc0
      [ 2064.393303]  call_rcu+0x11b/0xf70
      [ 2064.394885]  dlm_process_incoming_buffer+0x47d/0xfd0 [dlm]
      [ 2064.397694]  receive_from_sock+0x290/0x770 [dlm]
      [ 2064.399932]  process_recv_sockets+0x32/0x40 [dlm]
      [ 2064.402180]  process_one_work+0x9a8/0x16e0
      [ 2064.404388]  worker_thread+0x87/0xbf0
      [ 2064.406124]  kthread+0x3ac/0x490
      [ 2064.408021]  ret_from_fork+0x22/0x30
      [ 2064.409834]
      [ 2064.410599] The buggy address belongs to the object at ffff88800ef22780
      [ 2064.410599]  which belongs to the cache kmalloc-96 of size 96
      [ 2064.416495] The buggy address is located 88 bytes inside of
      [ 2064.416495]  96-byte region [ffff88800ef22780, ffff88800ef227e0)
      [ 2064.422045] The buggy address belongs to the page:
      [ 2064.424635] page:00000000b6bef8bc refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0xef22
      [ 2064.428970] flags: 0xfffffc0000200(slab|node=0|zone=1|lastcpupid=0x1fffff)
      [ 2064.432515] raw: 000fffffc0000200 ffffea0000d68b80 0000001400000014 ffff888001041780
      [ 2064.436110] raw: 0000000000000000 0000000080200020 00000001ffffffff 0000000000000000
      [ 2064.439813] page dumped because: kasan: bad access detected
      [ 2064.442548]
      [ 2064.443310] Memory state around the buggy address:
      [ 2064.445988]  ffff88800ef22680: 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc fc
      [ 2064.449444]  ffff88800ef22700: 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc fc
      [ 2064.452941] >ffff88800ef22780: 00 00 00 00 00 00 00 00 00 00 00 fc fc fc fc fc
      [ 2064.456383]                                                     ^
      [ 2064.459386]  ffff88800ef22800: 00 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc
      [ 2064.462788]  ffff88800ef22880: 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc fc
      [ 2064.466239] ==================================================================
      
      reproducer in python:
      
      import argparse
      import struct
      import fcntl
      import os
      
      parser = argparse.ArgumentParser()
      
      parser.add_argument('-f', '--file',
      		    help='file to use fcntl, must be on dlm lock filesystem e.g. gfs2')
      
      args = parser.parse_args()
      
      f = open(args.file, 'wb+')
      
      lockdata = struct.pack('hhllhh', fcntl.F_WRLCK,0,0,0,0,0)
      fcntl.fcntl(f, fcntl.F_SETLK, lockdata)
      lockdata = struct.pack('hhllhh', fcntl.F_UNLCK,0,0,0,0,0)
      fcntl.fcntl(f, fcntl.F_SETLK, lockdata)
      
      Fixes: 586759f0 ("gfs2: nfs lock support for gfs2")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      42252d0d
    • Alexander Aring's avatar
      dlm: fix missing check in validate_lock_args · 67e4d8c5
      Alexander Aring authored
      This patch adds a additional check if lkb->lkb_wait_count is non zero as
      it is done in validate_unlock_args() to check if any operation is in
      progress. While on it add a comment taken from validate_unlock_args() to
      signal what the check is doing.
      
      There might be no changes because if lkb->lkb_wait_type is non zero
      implies that lkb->lkb_wait_count is non zero. However we should add the
      check as it does validate_unlock_args().
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      67e4d8c5
    • Dan Carpenter's avatar
      dlm: uninitialized variable on error in dlm_listen_for_all() · 1f4f1084
      Dan Carpenter authored
      The "sock" variable is not initialized on this error path.
      
      Cc: stable@vger.kernel.org
      Fixes: 2dc6b115 ("fs: dlm: introduce generic listen")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      1f4f1084
  4. 03 Apr, 2022 8 commits
  5. 02 Apr, 2022 5 commits
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-for-v5.18-2022-04-02' of... · be2d3ece
      Linus Torvalds authored
      Merge tag 'perf-tools-for-v5.18-2022-04-02' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull more perf tools updates from Arnaldo Carvalho de Melo:
      
       - Avoid SEGV if core.cpus isn't set in 'perf stat'.
      
       - Stop depending on .git files for building PERF-VERSION-FILE, used in
         'perf --version', fixing some perf tools build scenarios.
      
       - Convert tracepoint.py example to python3.
      
       - Update UAPI header copies from the kernel sources: socket,
         mman-common, msr-index, KVM, i915 and cpufeatures.
      
       - Update copy of libbpf's hashmap.c.
      
       - Directly return instead of using local ret variable in
         evlist__create_syswide_maps(), found by coccinelle.
      
      * tag 'perf-tools-for-v5.18-2022-04-02' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux:
        perf python: Convert tracepoint.py example to python3
        perf evlist: Directly return instead of using local ret variable
        perf cpumap: More cpu map reuse by merge.
        perf cpumap: Add is_subset function
        perf evlist: Rename cpus to user_requested_cpus
        perf tools: Stop depending on .git files for building PERF-VERSION-FILE
        tools headers cpufeatures: Sync with the kernel sources
        tools headers UAPI: Sync drm/i915_drm.h with the kernel sources
        tools headers UAPI: Sync linux/kvm.h with the kernel sources
        tools kvm headers arm64: Update KVM headers from the kernel sources
        tools arch x86: Sync the msr-index.h copy with the kernel sources
        tools headers UAPI: Sync asm-generic/mman-common.h with the kernel
        perf beauty: Update copy of linux/socket.h with the kernel sources
        perf tools: Update copy of libbpf's hashmap.c
        perf stat: Avoid SEGV if core.cpus isn't set
      be2d3ece
    • Linus Torvalds's avatar
      Merge tag 'kbuild-fixes-v5.18' of... · d897b680
      Linus Torvalds authored
      Merge tag 'kbuild-fixes-v5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
      
      Pull Kbuild fixes from Masahiro Yamada:
      
       - Fix empty $(PYTHON) expansion.
      
       - Fix UML, which got broken by the attempt to suppress Clang warnings.
      
       - Fix warning message in modpost.
      
      * tag 'kbuild-fixes-v5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
        modpost: restore the warning message for missing symbol versions
        Revert "um: clang: Strip out -mno-global-merge from USER_CFLAGS"
        kbuild: Remove '-mno-global-merge'
        kbuild: fix empty ${PYTHON} in scripts/link-vmlinux.sh
        kconfig: remove stale comment about removed kconfig_print_symbol()
      d897b680
    • Linus Torvalds's avatar
      Merge tag 'mips_5.18_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux · 0b0fa57a
      Linus Torvalds authored
      Pull MIPS fixes from Thomas Bogendoerfer:
      
       - build fix for gpio
      
       - fix crc32 build problems
      
       - check for failed memory allocations
      
      * tag 'mips_5.18_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
        MIPS: crypto: Fix CRC32 code
        MIPS: rb532: move GPIOD definition into C-files
        MIPS: lantiq: check the return value of kzalloc()
        mips: sgi-ip22: add a check for the return of kzalloc()
      0b0fa57a
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 38904911
      Linus Torvalds authored
      Pull kvm fixes from Paolo Bonzini:
      
       - Only do MSR filtering for MSRs accessed by rdmsr/wrmsr
      
       - Documentation improvements
      
       - Prevent module exit until all VMs are freed
      
       - PMU Virtualization fixes
      
       - Fix for kvm_irq_delivery_to_apic_fast() NULL-pointer dereferences
      
       - Other miscellaneous bugfixes
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (42 commits)
        KVM: x86: fix sending PV IPI
        KVM: x86/mmu: do compare-and-exchange of gPTE via the user address
        KVM: x86: Remove redundant vm_entry_controls_clearbit() call
        KVM: x86: cleanup enter_rmode()
        KVM: x86: SVM: fix tsc scaling when the host doesn't support it
        kvm: x86: SVM: remove unused defines
        KVM: x86: SVM: move tsc ratio definitions to svm.h
        KVM: x86: SVM: fix avic spec based definitions again
        KVM: MIPS: remove reference to trap&emulate virtualization
        KVM: x86: document limitations of MSR filtering
        KVM: x86: Only do MSR filtering when access MSR by rdmsr/wrmsr
        KVM: x86/emulator: Emulate RDPID only if it is enabled in guest
        KVM: x86/pmu: Fix and isolate TSX-specific performance event logic
        KVM: x86: mmu: trace kvm_mmu_set_spte after the new SPTE was set
        KVM: x86/svm: Clear reserved bits written to PerfEvtSeln MSRs
        KVM: x86: Trace all APICv inhibit changes and capture overall status
        KVM: x86: Add wrappers for setting/clearing APICv inhibits
        KVM: x86: Make APICv inhibit reasons an enum and cleanup naming
        KVM: X86: Handle implicit supervisor access with SMAP
        KVM: X86: Rename variable smap to not_smap in permission_fault()
        ...
      38904911
    • Masahiro Yamada's avatar
      modpost: restore the warning message for missing symbol versions · bf5c0c22
      Masahiro Yamada authored
      This log message was accidentally chopped off.
      
      I was wondering why this happened, but checking the ML log, Mark
      precisely followed my suggestion [1].
      
      I just used "..." because I was too lazy to type the sentence fully.
      Sorry for the confusion.
      
      [1]: https://lore.kernel.org/all/CAK7LNAR6bXXk9-ZzZYpTqzFqdYbQsZHmiWspu27rtsFxvfRuVA@mail.gmail.com/
      
      Fixes: 4a679593 ("kbuild: modpost: Explicitly warn about unprototyped symbols")
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Acked-by: default avatarMark Brown <broonie@kernel.org>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      bf5c0c22