[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [bug report] xen/pvcalls: implement release command



Hello Stefano Stabellini,

The patch 235a71c53903: "xen/pvcalls: implement release command" from
Oct 30, 2017, leads to the following static checker warning:

        drivers/xen/pvcalls-front.c:1051 pvcalls_front_release()
        error: double lock 'mutex:&map->active.in_mutex'

drivers/xen/pvcalls-front.c
  1037          if (map->active_socket) {
  1038                  /*
  1039                   * Set in_error and wake up inflight_conn_req to force
  1040                   * recvmsg waiters to exit.
  1041                   */
  1042                  map->active.ring->in_error = -EBADF;
  1043                  wake_up_interruptible(&map->active.inflight_conn_req);
  1044  
  1045                  /*
  1046                   * Wait until there are no more waiters on the mutexes.
  1047                   * We know that no new waiters can be added because 
sk_send_head
  1048                   * is set to NULL -- we only need to wait for the 
existing
  1049                   * waiters to return.
  1050                   */
  1051                  while (!mutex_trylock(&map->active.in_mutex) ||
  1052                             !mutex_trylock(&map->active.out_mutex))
  1053                          cpu_relax();

mutex_trylock() returns 1 if you take the lock and 0 if not.  So I think
the static checker is right that this code has an issue.

Assume you take in_mutex on the first try, but you can't take out_mutex.
That means you the next times you call mutex_trylock() in_mutex is going
to fail.  So it's an endless loop.

But it could also be that I haven't slept well recently and my eyes are
cross eyed.

  1054  
  1055                  pvcalls_front_free_map(bedata, map);
  1056          } else {

regards,
dan carpenter

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.