From mboxrd@z Thu Jan 1 00:00:00 1970 From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers) Date: Tue, 5 Jun 2012 11:19:05 -0400 Subject: [lttng-dev] UST check pointer/de-reference order In-Reply-To: <524C960C5DFC794E82BE548D825F05CF28344978@EU-MBX-01.mgc.mentorg.com> References: <524C960C5DFC794E82BE548D825F05CF283435F8@EU-MBX-01.mgc.mentorg.com> <524C960C5DFC794E82BE548D825F05CF28344927@EU-MBX-01.mgc.mentorg.com> <524C960C5DFC794E82BE548D825F05CF28344978@EU-MBX-01.mgc.mentorg.com> Message-ID: <20120605151905.GB21325@Krystal> * Oestman, Fredrik (Fredrik_Oestman at mentor.com) wrote: > I stumbled across some code where pointers are de-referenced and then checked for NULL. > > Cheers, merged into master and stable-2.0, thanks! Mathieu > > 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); > > _______________________________________________ > lttng-dev mailing list > lttng-dev at lists.lttng.org > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com