[lttng-dev] UST check pointer/de-reference order
Oestman, Fredrik
Fredrik_Oestman at mentor.com
Tue Jun 5 04:19:29 EDT 2012
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);
More information about the lttng-dev
mailing list