| commit | 7851a396511b623aca735d607382b93494c332a4 | [log] [tgz] |
|---|---|---|
| author | Andrew Jeffery <andrew@codeconstruct.com.au> | Tue Jul 09 16:30:22 2024 +0930 |
| committer | Andrew Jeffery <andrew@codeconstruct.com.au> | Tue Jul 09 17:57:17 2024 +0930 |
| tree | 97a076a7a8b6ffe304ab03fb52b9d7a2592c7b3a | |
| parent | 9cc8459acc0a425920aa663c8cdd5043464c366e [diff] |
obmc-console: Address more instances of realloc() with size 0
There are some portability concerns around the behavior of passing
a zero size to realloc*() APIs. One instance caught by valgrind was
fixed in 2f1abc37384d ("Fix realloc() with size 0"). All invocations of
realloc*() APIs were evaluated, and those fixed here are the ones that
were at risk.
There's a broader problem of the code-base assuming realloc*() calls
don't return NULL (and malloc() also). The returned pointer is usually
written into the pointer object passed as the first argument, which
means the existing object would be leaked. Fixing that is a bigger
endeavor as the callers of the functions invoking realloc*() are often
written with the assumption that the result is not NULL. However, with
this change, at least one of the realloc*() concerns is put to rest.
Change-Id: I5dd6f4f8cc3164e400c87ea37afc350840a1865d
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
To build this project, run the following shell commands:
meson setup build meson compile -C build
To test:
meson test -C build
Running the server requires a serial port (e.g. /dev/ttyS0):
touch obmc-console.conf ./obmc-console-server --config obmc-console.conf ttyS0
To connect to the server, simply run the client:
./obmc-console-client
To disconnect the client, use the standard ~. combination.
This shows how the host UART connection is abstracted within the BMC as a Unix domain socket.
+---------------------------------------------------------------------------------------------+
| |
| obmc-console-client unix domain socket obmc-console-server |
| |
| +----------------------+ +------------------------+ |
| | client.2200.conf | +---------------------+ | server.ttyVUART0.conf | |
+---+--+ +----------------------+ | | +------------------------+ +--------+-------+
Network | 2200 +--> +->+ @obmc-console.host0 +<-+ <--+ /dev/ttyVUART0 | UARTs
+---+--+ | console-id = "host0" | | | | console-id = "host0" | +--------+-------+
| | | +---------------------+ | | |
| +----------------------+ +------------------------+ |
| |
| |
| |
+---------------------------------------------------------------------------------------------+
This supports multiple independent consoles. The console-id is a unique portion for the unix domain socket created by the obmc-console-server instance. The server needs to know this because it needs to know what to name the pipe; the client needs to know it as it needs to form the abstract socket name to which to connect.