[Spice-devel] [PATCH spice-server 2/2] char device: Ensure public function parameters are not NULL

Pavel Grunt pgrunt at redhat.com
Thu Nov 5 07:58:32 PST 2015


---
 server/char_device.c | 47 ++++++++++++++++++++++++++++++++++++++++++++---
 server/reds.c        |  2 ++
 server/spicevmc.c    |  6 ++++++
 3 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/server/char_device.c b/server/char_device.c
index 54357f0..00ed4d9 100644
--- a/server/char_device.c
+++ b/server/char_device.c
@@ -376,6 +376,9 @@ void spice_char_device_send_to_client_tokens_add(SpiceCharDeviceState *dev,
 {
     SpiceCharDeviceClientState *dev_client;
 
+    spice_return_if_fail(dev != NULL);
+    spice_return_if_fail(client != NULL);
+
     dev_client = spice_char_device_client_find(dev, client);
 
     if (!dev_client) {
@@ -391,6 +394,9 @@ void spice_char_device_send_to_client_tokens_set(SpiceCharDeviceState *dev,
 {
     SpiceCharDeviceClientState *dev_client;
 
+    spice_return_if_fail(dev != NULL);
+    spice_return_if_fail(client != NULL);
+
     dev_client = spice_char_device_client_find(dev, client);
 
     if (!dev_client) {
@@ -573,6 +579,8 @@ SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get(SpiceCharDeviceSt
                                                                RedClient *client,
                                                                int size)
 {
+    spice_return_val_if_fail(dev != NULL, NULL);
+
    return  __spice_char_device_write_buffer_get(dev, client, size,
              client ? WRITE_BUFFER_ORIGIN_CLIENT : WRITE_BUFFER_ORIGIN_SERVER,
              0);
@@ -581,6 +589,8 @@ SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get(SpiceCharDeviceSt
 SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get_server_no_token(
     SpiceCharDeviceState *dev, int size)
 {
+    spice_return_val_if_fail(dev != NULL, NULL);
+
    return  __spice_char_device_write_buffer_get(dev, NULL, size,
              WRITE_BUFFER_ORIGIN_SERVER_NO_TOKEN, 0);
 }
@@ -597,6 +607,7 @@ void spice_char_device_write_buffer_add(SpiceCharDeviceState *dev,
                                         SpiceCharDeviceWriteBuffer *write_buf)
 {
     spice_assert(dev);
+    spice_return_if_fail(write_buf != NULL);
     /* caller shouldn't add buffers for client that was removed */
     if (write_buf->origin == WRITE_BUFFER_ORIGIN_CLIENT &&
         !spice_char_device_client_find(dev, write_buf->client)) {
@@ -612,9 +623,15 @@ void spice_char_device_write_buffer_add(SpiceCharDeviceState *dev,
 void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev,
                                             SpiceCharDeviceWriteBuffer *write_buf)
 {
-    int buf_origin = write_buf->origin;
-    uint32_t buf_token_price = write_buf->token_price;
-    RedClient *client = write_buf->client;
+    int buf_origin;
+    uint32_t buf_token_price;
+    RedClient *client;
+
+    spice_return_if_fail(write_buf != NULL);
+
+    buf_origin = write_buf->origin;
+    buf_token_price = write_buf->token_price;
+    client = write_buf->client;
 
     spice_assert(!ring_item_is_linked(&write_buf->link));
     if (!dev) {
@@ -690,6 +707,8 @@ SpiceCharDeviceState *spice_char_device_state_create(SpiceCharDeviceInstance *si
 void spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *state,
                                                 SpiceCharDeviceInstance *sin)
 {
+    spice_return_if_fail(state != NULL);
+    spice_return_if_fail(sin != NULL);
     spice_debug("sin %p dev_state %p", sin, state);
     state->sin = sin;
     sin->st = state;
@@ -697,6 +716,7 @@ void spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *state,
 
 void *spice_char_device_state_opaque_get(SpiceCharDeviceState *dev)
 {
+    spice_return_val_if_fail(dev != NULL, NULL);
     return dev->opaque;
 }
 
@@ -721,6 +741,8 @@ static void spice_char_device_state_unref(SpiceCharDeviceState *char_dev)
 
 void spice_char_device_state_destroy(SpiceCharDeviceState *char_dev)
 {
+    spice_return_if_fail(char_dev != NULL);
+
     reds_on_char_device_state_destroy(char_dev);
     if (char_dev->write_to_dev_timer) {
         core->timer_remove(char_dev->write_to_dev_timer);
@@ -796,6 +818,9 @@ void spice_char_device_client_remove(SpiceCharDeviceState *dev,
 {
     SpiceCharDeviceClientState *dev_client;
 
+    spice_return_if_fail(dev != NULL);
+    spice_return_if_fail(client != NULL);
+
     spice_debug("dev_state %p client %p", dev, client);
     dev_client = spice_char_device_client_find(dev, client);
 
@@ -814,11 +839,16 @@ void spice_char_device_client_remove(SpiceCharDeviceState *dev,
 int spice_char_device_client_exists(SpiceCharDeviceState *dev,
                                     RedClient *client)
 {
+    spice_return_val_if_fail(dev != NULL, FALSE);
+    spice_return_val_if_fail(client != NULL, FALSE);
+
     return (spice_char_device_client_find(dev, client) != NULL);
 }
 
 void spice_char_device_start(SpiceCharDeviceState *dev)
 {
+    spice_return_if_fail(dev != NULL);
+
     spice_debug("dev_state %p", dev);
     dev->running = TRUE;
     spice_char_device_state_ref(dev);
@@ -829,6 +859,8 @@ void spice_char_device_start(SpiceCharDeviceState *dev)
 
 void spice_char_device_stop(SpiceCharDeviceState *dev)
 {
+    spice_return_if_fail(dev != NULL);
+
     spice_debug("dev_state %p", dev);
     dev->running = FALSE;
     dev->active = FALSE;
@@ -841,6 +873,8 @@ void spice_char_device_reset(SpiceCharDeviceState *dev)
 {
     RingItem *client_item;
 
+    spice_return_if_fail(dev != NULL);
+
     spice_char_device_stop(dev);
     dev->wait_for_migrate_data = FALSE;
     spice_debug("dev_state %p", dev);
@@ -871,6 +905,8 @@ void spice_char_device_reset(SpiceCharDeviceState *dev)
 
 void spice_char_device_wakeup(SpiceCharDeviceState *dev)
 {
+    spice_return_if_fail(dev != NULL);
+
     spice_char_device_write_to_device(dev);
     spice_char_device_read_from_device(dev);
 }
@@ -883,6 +919,7 @@ void spice_char_device_state_migrate_data_marshall_empty(SpiceMarshaller *m)
 {
     SpiceMigrateDataCharDevice *mig_data;
 
+    spice_return_if_fail(m != NULL);
     spice_debug(NULL);
     mig_data = (SpiceMigrateDataCharDevice *)spice_marshaller_reserve_space(m,
                                                                             sizeof(*mig_data));
@@ -907,6 +944,8 @@ void spice_char_device_state_migrate_data_marshall(SpiceCharDeviceState *dev,
     uint32_t *write_to_dev_tokens_ptr;
     SpiceMarshaller *m2;
 
+    spice_return_if_fail(dev != NULL);
+    spice_return_if_fail(m != NULL);
     /* multi-clients are not supported */
     spice_assert(dev->num_clients == 1);
     client_state = SPICE_CONTAINEROF(ring_get_tail(&dev->clients),
@@ -964,6 +1003,8 @@ int spice_char_device_state_restore(SpiceCharDeviceState *dev,
     SpiceCharDeviceClientState *client_state;
     uint32_t client_tokens_window;
 
+    spice_return_val_if_fail(dev != NULL, FALSE);
+    spice_return_val_if_fail(mig_data != NULL, FALSE);
     spice_assert(dev->num_clients == 1 && dev->wait_for_migrate_data);
 
     client_state = SPICE_CONTAINEROF(ring_get_tail(&dev->clients),
diff --git a/server/reds.c b/server/reds.c
index 1f6774e..4d18ca8 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -2983,6 +2983,8 @@ static SpiceCharDeviceState *attach_to_red_agent(SpiceCharDeviceInstance *sin)
 
 SPICE_GNUC_VISIBLE void spice_server_char_device_wakeup(SpiceCharDeviceInstance* sin)
 {
+    spice_return_if_fail(sin != NULL);
+
     if (!sin->st) {
         spice_warning("no SpiceCharDeviceState attached to instance %p", sin);
         return;
diff --git a/server/spicevmc.c b/server/spicevmc.c
index 6ac1561..0780192 100644
--- a/server/spicevmc.c
+++ b/server/spicevmc.c
@@ -508,6 +508,8 @@ SpiceCharDeviceState *spicevmc_device_connect(SpiceCharDeviceInstance *sin,
     ClientCbs client_cbs = { NULL, };
     SpiceCharDeviceCallbacks char_dev_cbs = {NULL, };
 
+    spice_return_val_if_fail(sin != NULL, NULL);
+
     channel_cbs.config_socket = spicevmc_red_channel_client_config_socket;
     channel_cbs.on_disconnect = spicevmc_red_channel_client_on_disconnect;
     channel_cbs.send_item = spicevmc_red_channel_send_item;
@@ -552,6 +554,8 @@ void spicevmc_device_disconnect(SpiceCharDeviceInstance *sin)
 {
     SpiceVmcState *state;
 
+    spice_return_if_fail(sin != NULL);
+
     state = (SpiceVmcState *)spice_char_device_state_opaque_get(sin->st);
 
     if (state->recv_from_client_buf) {
@@ -569,6 +573,8 @@ SPICE_GNUC_VISIBLE void spice_server_port_event(SpiceCharDeviceInstance *sin, ui
 {
     SpiceVmcState *state;
 
+    spice_return_if_fail(sin != NULL);
+
     if (sin->st == NULL) {
         spice_warning("no SpiceCharDeviceState attached to instance %p", sin);
         return;
-- 
2.5.0



More information about the Spice-devel mailing list