On Tue, 27 Jul 2021 13:49:06 +0200
"Damian Wrobel" <[email protected]> wrote:
> Fixes the following warning:
> pseudo_client.c: In function ‘pseudo_client_op’:
> cc1: warning: function may return address of local variable
> [-Wreturn-local-addr] pseudo_client.c:1592:22: note: declared here
> 1592 | pseudo_msg_t msg = { .type = PSEUDO_MSG_OP };
> | ^~~
>
> Signed-off-by: Damian Wrobel <[email protected]>
> ---
> pseudo_client.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/pseudo_client.c b/pseudo_client.c
> index 2583bca..f1d09ff 100644
> --- a/pseudo_client.c
> +++ b/pseudo_client.c
> @@ -1889,7 +1889,7 @@ pseudo_client_op(pseudo_op_t op, int access,
> int fd, int dirfd, const char *path case OP_CHROOT:
> if (pseudo_client_chroot(path) == 0) {
> /* return a non-zero value to show
> non-failure */
> - result = &msg;
> + result = pseudo_msg_dup(&msg);
This is a memory leak.
That said, I have no idea how the underlying bug escaped notice all
this time, it's definitely a bug. I think it is actually safe to just
make msg be static, because pseudo_client_op is protected by a lock
and is never executed more than once at a time.
On reflection: I think the way it worked is that in that case, the
actual message isn't looked at, just checked for nullness, but this
is still undefined behavior because the result is a pointer to storage
after the storage's lifetime, and formally you can't even check those
for "is or isn't null".
-s
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#154168):
https://lists.openembedded.org/g/openembedded-core/message/154168
Mute This Topic: https://lists.openembedded.org/mt/84479678/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-