mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-13 23:14:46 +00:00
[MINOR] cfgparse: Check whether the path given for the stats socket actually fits into the sockaddr_un structure to avoid truncation.
while working further on the changes to allow for dynamic adding/removing of backend servers we noticed a potential problem: the path given for the 'stats socket' global option may get truncated when copying it into the sockaddr_un.sun_path field. Attached patch checks the length, and reports an error if truncation would happen. This issue was noticed by Joerg Sonnenberger <joerg@NetBSD.org>.
This commit is contained in:
parent
7d286a0f63
commit
16171e234b
@ -151,7 +151,7 @@ static int stats_parse_global(char **args, int section_type, struct proxy *curpx
|
||||
{
|
||||
args++;
|
||||
if (!strcmp(args[0], "socket")) {
|
||||
struct sockaddr_un su;
|
||||
struct sockaddr_un *su;
|
||||
int cur_arg;
|
||||
|
||||
if (*args[1] == 0) {
|
||||
@ -164,10 +164,12 @@ static int stats_parse_global(char **args, int section_type, struct proxy *curpx
|
||||
return -1;
|
||||
}
|
||||
|
||||
su.sun_family = AF_UNIX;
|
||||
strncpy(su.sun_path, args[1], sizeof(su.sun_path));
|
||||
su.sun_path[sizeof(su.sun_path) - 1] = 0;
|
||||
memcpy(&global.stats_sock.addr, &su, sizeof(su)); // guaranteed to fit
|
||||
su = str2sun(args[1]);
|
||||
if (!su) {
|
||||
snprintf(err, errlen, "'stats socket' path would require truncation");
|
||||
return -1;
|
||||
}
|
||||
memcpy(&global.stats_sock.addr, su, sizeof(struct sockaddr_un)); // guaranteed to fit
|
||||
|
||||
if (!global.stats_fe) {
|
||||
if ((global.stats_fe = alloc_stats_fe("GLOBAL")) == NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user