From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fredrik_Oestman@mentor.com (Oestman, Fredrik) Date: Tue, 5 Jun 2012 08:19:29 +0000 Subject: [lttng-dev] UST check pointer/de-reference order In-Reply-To: <524C960C5DFC794E82BE548D825F05CF28344927@EU-MBX-01.mgc.mentorg.com> References: <524C960C5DFC794E82BE548D825F05CF283435F8@EU-MBX-01.mgc.mentorg.com> <524C960C5DFC794E82BE548D825F05CF28344927@EU-MBX-01.mgc.mentorg.com> Message-ID: <524C960C5DFC794E82BE548D825F05CF28344978@EU-MBX-01.mgc.mentorg.com> I stumbled across some code where pointers are de-referenced and then checked for NULL. Cheers, Fredrik ?stman diff --git a/liblttng-ust-ctl/ustctl.c b/liblttng-ust-ctl/ustctl.c index 9789413..80aed04 100644 --- a/liblttng-ust-ctl/ustctl.c +++ b/liblttng-ust-ctl/ustctl.c @@ -732,7 +732,7 @@ void ustctl_unmap_channel(struct lttng_ust_shm_handle *handle) struct lttng_ust_lib_ring_buffer *ustctl_open_stream_read(struct lttng_ust_shm_handle *handle, int cpu) { - struct channel *chan = handle->shadow_chan; + struct channel *chan; int *shm_fd, *wait_fd; uint64_t *memory_map_size; struct lttng_ust_lib_ring_buffer *buf; @@ -741,6 +741,7 @@ struct lttng_ust_lib_ring_buffer *ustctl_open_stream_read(struct lttng_ust_shm_h if (!handle) return NULL; + chan = handle->shadow_chan; buf = channel_get_ring_buffer(&chan->backend.config, chan, cpu, handle, &shm_fd, &wait_fd, &memory_map_size); if (!buf) @@ -784,11 +785,12 @@ int ustctl_get_mmap_len(struct lttng_ust_shm_handle *handle, unsigned long *len) { unsigned long mmap_buf_len; - struct channel *chan = handle->shadow_chan; + struct channel *chan; if (!handle || !buf || !len) return -EINVAL; + chan = handle->shadow_chan; if (chan->backend.config.output != RING_BUFFER_MMAP) return -EINVAL; mmap_buf_len = chan->backend.buf_size; @@ -805,11 +807,12 @@ int ustctl_get_max_subbuf_size(struct lttng_ust_shm_handle *handle, struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { - struct channel *chan = handle->shadow_chan; + struct channel *chan; if (!handle || !buf || !len) return -EINVAL; + chan = handle->shadow_chan; *len = chan->backend.subbuf_size; return 0; } @@ -823,12 +826,13 @@ int ustctl_get_max_subbuf_size(struct lttng_ust_shm_handle *handle, int ustctl_get_mmap_read_offset(struct lttng_ust_shm_handle *handle, struct lttng_ust_lib_ring_buffer *buf, unsigned long *off) { - struct channel *chan = handle->shadow_chan; + struct channel *chan; unsigned long sb_bindex; if (!handle || !buf || !off) return -EINVAL; + chan = handle->shadow_chan; if (chan->backend.config.output != RING_BUFFER_MMAP) return -EINVAL; sb_bindex = subbuffer_id_get_index(&chan->backend.config, @@ -841,11 +845,12 @@ int ustctl_get_mmap_read_offset(struct lttng_ust_shm_handle *handle, int ustctl_get_subbuf_size(struct lttng_ust_shm_handle *handle, struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { - struct channel *chan = handle->shadow_chan; + struct channel *chan; if (!handle || !buf || !len) return -EINVAL; + chan = handle->shadow_chan; *len = lib_ring_buffer_get_read_data_size(&chan->backend.config, buf, handle); return 0; @@ -855,11 +860,12 @@ int ustctl_get_subbuf_size(struct lttng_ust_shm_handle *handle, int ustctl_get_padded_subbuf_size(struct lttng_ust_shm_handle *handle, struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { - struct channel *chan = handle->shadow_chan; + struct channel *chan; if (!handle || !buf || !len) return -EINVAL; + chan = handle->shadow_chan; *len = lib_ring_buffer_get_read_data_size(&chan->backend.config, buf, handle); *len = PAGE_ALIGN(*len);