[lustre-devel] [bug report] staging: lustre: replace simple cases of LIBCFS_ALLOC with kzalloc.

Dan Carpenter dan.carpenter at oracle.com
Mon Jan 15 01:26:57 PST 2018


[  This code was already buggy, it's just that Neil's change made it
   show up in static analysis.  - dan ]

Hello NeilBrown,

The patch 3c88bdbbf919: "staging: lustre: replace simple cases of
LIBCFS_ALLOC with kzalloc." from Jan 9, 2018, leads to the following
static checker warning:

	drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c:3323 kiblnd_connd()
	error: dereferencing freed memory 'conn'

drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
  3303                  if (!list_empty(&kiblnd_data.kib_connd_zombies)) {
  3304                          struct kib_peer *peer = NULL;
  3305  
  3306                          conn = list_entry(kiblnd_data.kib_connd_zombies.next,
  3307                                            struct kib_conn, ibc_list);
  3308                          list_del(&conn->ibc_list);
  3309                          if (conn->ibc_reconnect) {
  3310                                  peer = conn->ibc_peer;
  3311                                  kiblnd_peer_addref(peer);
  3312                          }
  3313  
  3314                          spin_unlock_irqrestore(lock, flags);
  3315                          dropped_lock = 1;
  3316  
  3317                          kiblnd_destroy_conn(conn, !peer);
                                                    ^^^^
Freed

  3318  
  3319                          spin_lock_irqsave(lock, flags);
  3320                          if (!peer)
  3321                                  continue;
  3322  
  3323                          conn->ibc_peer = peer;
                                ^^^^^^^^^^^^^^
Use after free

  3324                          if (peer->ibp_reconnected < KIB_RECONN_HIGH_RACE)
  3325                                  list_add_tail(&conn->ibc_list,
                                                       ^^^^^^^^^^^^^^

  3326                                                &kiblnd_data.kib_reconn_list);
  3327                          else
  3328                                  list_add_tail(&conn->ibc_list,
                                                       ^^^^^^^^^^^^^^

  3329                                                &kiblnd_data.kib_reconn_wait);
  3330                  }

regards,
dan carpenter


More information about the lustre-devel mailing list