projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: double-free on error sending fields
[lttng-ust.git]
/
liblttng-ust-comm
/
lttng-ust-comm.c
diff --git
a/liblttng-ust-comm/lttng-ust-comm.c
b/liblttng-ust-comm/lttng-ust-comm.c
index 42c9ddb2eae152d88acdba3e177ab9482b4426e8..1a4419f52a98fbf5e51480b2810826bad9744166 100644
(file)
--- a/
liblttng-ust-comm/lttng-ust-comm.c
+++ b/
liblttng-ust-comm/lttng-ust-comm.c
@@
-1016,18
+1016,17
@@
int ustcomm_register_event(int sock,
/* send signature */
len = ustcomm_send_unix_sock(sock, signature, signature_len);
if (len > 0 && len != signature_len) {
/* send signature */
len = ustcomm_send_unix_sock(sock, signature, signature_len);
if (len > 0 && len != signature_len) {
-
free(fields)
;
-
return -EIO
;
+
ret = -EIO
;
+
goto error_fields
;
}
if (len < 0) {
}
if (len < 0) {
-
free(fields)
;
-
return len
;
+
ret = len
;
+
goto error_fields
;
}
/* send fields */
if (fields_len > 0) {
len = ustcomm_send_unix_sock(sock, fields, fields_len);
}
/* send fields */
if (fields_len > 0) {
len = ustcomm_send_unix_sock(sock, fields, fields_len);
- free(fields);
if (len > 0 && len != fields_len) {
ret = -EIO;
goto error_fields;
if (len > 0 && len != fields_len) {
ret = -EIO;
goto error_fields;
@@
-1036,21
+1035,18
@@
int ustcomm_register_event(int sock,
ret = len;
goto error_fields;
}
ret = len;
goto error_fields;
}
- } else {
- free(fields);
}
}
+ free(fields);
if (model_emf_uri_len) {
/* send model_emf_uri */
len = ustcomm_send_unix_sock(sock, model_emf_uri,
model_emf_uri_len);
if (len > 0 && len != model_emf_uri_len) {
if (model_emf_uri_len) {
/* send model_emf_uri */
len = ustcomm_send_unix_sock(sock, model_emf_uri,
model_emf_uri_len);
if (len > 0 && len != model_emf_uri_len) {
- ret = -EIO;
- goto error_fields;
+ return -EIO;
}
if (len < 0) {
}
if (len < 0) {
- ret = len;
- goto error_fields;
+ return len;
}
}
}
}
@@
-1085,7
+1081,9
@@
int ustcomm_register_event(int sock,
return len;
}
}
return len;
}
}
+ /* Unreached. */
+ /* Error path only. */
error_fields:
free(fields);
return ret;
error_fields:
free(fields);
return ret;
This page took
0.02405 seconds
and
4
git commands to generate.