All of lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] VMCI: queue pairs implementation.
@ 2017-03-22 11:18 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2017-03-22 11:18 UTC (permalink / raw)
  To: georgezhang, Jorgen Hansen, Andy King; +Cc: linux-kernel

Hello George Zhang,

The patch 06164d2b72aa: "VMCI: queue pairs implementation." from Jan
8, 2013, leads to the following static checker warning:

	drivers/misc/vmw_vmci/vmci_queue_pair.c:1850 qp_broker_alloc()
	warn: we tested 'is_local' before and it was 'false'

drivers/misc/vmw_vmci/vmci_queue_pair.c
  1779  static int qp_broker_alloc(struct vmci_handle handle,
  1780                             u32 peer,
  1781                             u32 flags,
  1782                             u32 priv_flags,
  1783                             u64 produce_size,
  1784                             u64 consume_size,
  1785                             struct vmci_qp_page_store *page_store,
  1786                             struct vmci_ctx *context,
  1787                             vmci_event_release_cb wakeup_cb,
  1788                             void *client_data,
  1789                             struct qp_broker_entry **ent,
  1790                             bool *swap)
  1791  {
  1792          const u32 context_id = vmci_ctx_get_id(context);
  1793          bool create;
  1794          struct qp_broker_entry *entry = NULL;
  1795          bool is_local = flags & VMCI_QPFLAG_LOCAL;
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Set here.

  1796          int result;
  1797  
  1798          if (vmci_handle_is_invalid(handle) ||
  1799              (flags & ~VMCI_QP_ALL_FLAGS) || is_local ||
                                                    ^^^^^^^^
If it's set then this function just returns an error.

  1800              !(produce_size || consume_size) ||
  1801              !context || context_id == VMCI_INVALID_ID ||
  1802              handle.context == VMCI_INVALID_ID) {
  1803                  return VMCI_ERROR_INVALID_ARGS;
  1804          }
  1805  
  1806          if (page_store && !VMCI_QP_PAGESTORE_IS_WELLFORMED(page_store))
  1807                  return VMCI_ERROR_INVALID_ARGS;
  1808  
  1809          /*
  1810           * In the initial argument check, we ensure that non-vmkernel hosts
  1811           * are not allowed to create local queue pairs.
  1812           */
  1813  
  1814          mutex_lock(&qp_broker_list.mutex);
  1815  
  1816          if (!is_local && vmci_ctx_qp_exists(context, handle)) {
                    ^^^^^^^^^
Tested.

  1817                  pr_devel("Context (ID=0x%x) already attached to queue pair (handle=0x%x:0x%x)\n",
  1818                           context_id, handle.context, handle.resource);
  1819                  mutex_unlock(&qp_broker_list.mutex);
  1820                  return VMCI_ERROR_ALREADY_EXISTS;
  1821          }
  1822  
  1823          if (handle.resource != VMCI_INVALID_ID)
  1824                  entry = qp_broker_handle_to_entry(handle);
  1825  
  1826          if (!entry) {
  1827                  create = true;
  1828                  result =
  1829                      qp_broker_create(handle, peer, flags, priv_flags,
  1830                                       produce_size, consume_size, page_store,
  1831                                       context, wakeup_cb, client_data, ent);
  1832          } else {
  1833                  create = false;
  1834                  result =
  1835                      qp_broker_attach(entry, peer, flags, priv_flags,
  1836                                       produce_size, consume_size, page_store,
  1837                                       context, wakeup_cb, client_data, ent);
  1838          }
  1839  
  1840          mutex_unlock(&qp_broker_list.mutex);
  1841  
  1842          if (swap)
  1843                  *swap = (context_id == VMCI_HOST_CONTEXT_ID) &&
  1844                      !(create && is_local);
                                        ^^^^^^^^
And tested again.

  1845  
  1846          return result;
  1847  }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-03-22 11:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-22 11:18 [bug report] VMCI: queue pairs implementation Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.