From: Celeste Liu <coelacanthushex@gmail.com>
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: Bluez <linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH bluez v2] monitor: fix buffer overflow when terminal width > 255
Date: Mon, 16 Sep 2024 23:39:04 +0800 [thread overview]
Message-ID: <098e9614-7a88-405c-8fb4-e13bc4f40efc@gmail.com> (raw)
In-Reply-To: <CABBYNZ+YMC856CdhETpCM9u4OYeO5+R+3hSbgigLszVaa+UPQQ@mail.gmail.com>
On 2024-09-16 23:10, Luiz Augusto von Dentz wrote:
> Hi Celeste,
>
> On Sat, Sep 14, 2024 at 12:10 PM Celeste Liu <coelacanthushex@gmail.com> wrote:
>>
>> In current code, we create line buffer with size 256, which can contains
>> 255 ASCII characters. But in modern system, terminal can have larger
>> width. It may cause buffer overflow in snprintf() text.
>>
>> We need allocate line buffer with size which can contains one line in
>> terminal. The size should be difficult to calculate because of multibyte
>> characters, but our code using line buffer assumed all characters has
>> 1 byte size (e.g. when we put packet text into line buffer via
>> snprintf(), we calculate max size by 1B * col.), so it's safe to
>> allocate line buffer with col + 1.
>>
>> Signed-off-by: Celeste Liu <CoelacanthusHex@gmail.com>
>> ---
>> Changes in v2:
>> - Add free() forgot in v1.
>> - Link to v1: https://patch.msgid.link/20240914-fix-log-buffer-overflow-v1-1-733cb4fff673@gmail.com
>> ---
>> monitor/packet.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/monitor/packet.c b/monitor/packet.c
>> index c2599fe6864ab44d657c121fcc3ceecc1ebc52a6..bef55477a221b6cb43ff224454ac3fa593cd8221 100644
>> --- a/monitor/packet.c
>> +++ b/monitor/packet.c
>> @@ -376,7 +376,8 @@ static void print_packet(struct timeval *tv, struct ucred *cred, char ident,
>> const char *text, const char *extra)
>> {
>> int col = num_columns();
>> - char line[256], ts_str[96], pid_str[140];
>> + char ts_str[96], pid_str[140];
>> + char *line = (char *) malloc(sizeof(char) * col + 1);
>
> Perhaps we could replace malloc with alloca here so we allocate the
> line on the heap rather than stack.
I will replace it with alloca() in the next version.
But to be honest, I think alloca() is not a good choice. The compiler will
prevent the functions that call alloca() be inline, otherwise it may trigger
unexpected stack overflow because it's not a scope-based lifetime. It may be
better to replace it with VLA once we bump the standard requirement to C99 or
above.
>
>> int n, ts_len = 0, ts_pos = 0, len = 0, pos = 0;
>> static size_t last_frame;
>>
>> @@ -525,6 +526,7 @@ static void print_packet(struct timeval *tv, struct ucred *cred, char ident,
>> printf("%s%s\n", use_color() ? COLOR_TIMESTAMP : "", ts_str);
>> } else
>> printf("%s\n", line);
>> + free(line);
>> }
>>
>> static const struct {
>>
>> ---
>> base-commit: 41f943630d9a03c40e95057b2ac3d96470b9c71e
>> change-id: 20240914-fix-log-buffer-overflow-9aa5e61ee5b8
>>
>> Best regards,
>> --
>> Celeste Liu <CoelacanthusHex@gmail.com>
>>
>>
>
>
next prev parent reply other threads:[~2024-09-16 15:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-14 16:09 [PATCH bluez v2] monitor: fix buffer overflow when terminal width > 255 Celeste Liu
2024-09-14 17:42 ` [bluez,v2] " bluez.test.bot
2024-09-16 15:10 ` [PATCH bluez v2] " Luiz Augusto von Dentz
2024-09-16 15:39 ` Celeste Liu [this message]
2024-09-16 15:57 ` Celeste Liu
2024-09-16 16:22 ` Luiz Augusto von Dentz
2024-09-17 6:31 ` Celeste Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=098e9614-7a88-405c-8fb4-e13bc4f40efc@gmail.com \
--to=coelacanthushex@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.