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.