In lttng-ust-elf.c, static functions used to extract build ID or debug
link information had an extraneous `found` parameter, carrying no more
information than could be obtained by checking the other out
parameters against NULL. The resulting simplified logic should also
prevent static analysis tools from misidentifying resource leaks.
Signed-off-by: Antoine Busque <abusque@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
static
int lttng_ust_elf_get_build_id_from_segment(
struct lttng_ust_elf *elf, uint8_t **build_id, size_t *length,
static
int lttng_ust_elf_get_build_id_from_segment(
struct lttng_ust_elf *elf, uint8_t **build_id, size_t *length,
- off_t offset, off_t segment_end, int *found)
+ off_t offset, off_t segment_end)
{
uint8_t *_build_id = NULL; /* Silence old gcc warning. */
size_t _length = 0; /* Silence old gcc warning. */
{
uint8_t *_build_id = NULL; /* Silence old gcc warning. */
size_t _length = 0; /* Silence old gcc warning. */
while (offset < segment_end) {
struct lttng_ust_elf_nhdr nhdr;
while (offset < segment_end) {
struct lttng_ust_elf_nhdr nhdr;
*build_id = _build_id;
*length = _length;
}
*build_id = _build_id;
*length = _length;
}
return 0;
error:
free(_build_id);
return 0;
error:
free(_build_id);
uint16_t i;
uint8_t *_build_id = NULL; /* Silence old gcc warning. */
size_t _length = 0; /* Silence old gcc warning. */
uint16_t i;
uint8_t *_build_id = NULL; /* Silence old gcc warning. */
size_t _length = 0; /* Silence old gcc warning. */
if (!elf || !build_id || !length || !found) {
goto error;
if (!elf || !build_id || !length || !found) {
goto error;
offset = phdr->p_offset;
segment_end = offset + phdr->p_filesz;
ret = lttng_ust_elf_get_build_id_from_segment(
offset = phdr->p_offset;
segment_end = offset + phdr->p_filesz;
ret = lttng_ust_elf_get_build_id_from_segment(
- elf, &_build_id, &_length, offset, segment_end,
- &_found);
+ elf, &_build_id, &_length, offset, segment_end);
next_loop:
free(phdr);
if (ret) {
goto error;
}
next_loop:
free(phdr);
if (ret) {
goto error;
}
*build_id = _build_id;
*length = _length;
*build_id = _build_id;
*length = _length;
+ *found = 1;
+ } else {
+ *found = 0;
return 0;
error:
free(_build_id);
return 0;
error:
free(_build_id);
*/
int lttng_ust_elf_get_debug_link_from_section(struct lttng_ust_elf *elf,
char **filename, uint32_t *crc,
*/
int lttng_ust_elf_get_debug_link_from_section(struct lttng_ust_elf *elf,
char **filename, uint32_t *crc,
struct lttng_ust_elf_shdr *shdr)
{
struct lttng_ust_elf_shdr *shdr)
{
char *_filename = NULL; /* Silence old gcc warning. */
size_t filename_len;
char *section_name = NULL;
uint32_t _crc = 0; /* Silence old gcc warning. */
char *_filename = NULL; /* Silence old gcc warning. */
size_t filename_len;
char *section_name = NULL;
uint32_t _crc = 0; /* Silence old gcc warning. */
- if (!elf || !filename || !crc || !found || !shdr) {
+ if (!elf || !filename || !crc || !shdr) {
*filename = _filename;
*crc = _crc;
}
*filename = _filename;
*crc = _crc;
}
char *_filename = NULL; /* Silence old gcc warning. */
uint32_t _crc = 0; /* Silence old gcc warning. */
char *_filename = NULL; /* Silence old gcc warning. */
uint32_t _crc = 0; /* Silence old gcc warning. */
}
ret = lttng_ust_elf_get_debug_link_from_section(
}
ret = lttng_ust_elf_get_debug_link_from_section(
- elf, &_filename, &_crc, &_found, shdr);
+ elf, &_filename, &_crc, shdr);
free(shdr);
if (ret) {
goto error;
}
free(shdr);
if (ret) {
goto error;
}
*filename = _filename;
*crc = _crc;
*filename = _filename;
*crc = _crc;
+ *found = 1;
+ } else {
+ *found = 0;
error:
free(_filename);
return -1;
error:
free(_filename);
return -1;