mirror of
https://github.com/postgres/postgres.git
synced 2025-06-06 00:02:36 -04:00
Fix two memcpy() bugs in the new injection point code
1. The memcpy()s in InjectionPointAttach() would copy garbage from beyond the end of input string to the buffer in shared memory. You won't usually notice, but if there is not enough valid mapped memory beyond the end of the string, the read of unmapped memory will segfault. This was flagged by the Cirrus CI build with address sanitizer enabled. 2. The memcpy() in injection_point_cache_add() failed to copy the NULL terminator. Discussion: https://www.postgresql.org/message-id/0615a424-b726-4157-afa7-4245629f9512%40iki.fi
This commit is contained in:
parent
49f7c6c44a
commit
0eb23285a2
@ -97,7 +97,7 @@ injection_point_cache_add(const char *name,
|
||||
hash_search(InjectionPointCache, name, HASH_ENTER, &found);
|
||||
|
||||
Assert(!found);
|
||||
memcpy(entry->name, name, strlen(name));
|
||||
strlcpy(entry->name, name, sizeof(entry->name));
|
||||
entry->callback = callback;
|
||||
}
|
||||
|
||||
@ -217,11 +217,11 @@ InjectionPointAttach(const char *name,
|
||||
}
|
||||
|
||||
/* Save the entry */
|
||||
memcpy(entry_by_name->name, name, sizeof(entry_by_name->name));
|
||||
strlcpy(entry_by_name->name, name, sizeof(entry_by_name->name));
|
||||
entry_by_name->name[INJ_NAME_MAXLEN - 1] = '\0';
|
||||
memcpy(entry_by_name->library, library, sizeof(entry_by_name->library));
|
||||
strlcpy(entry_by_name->library, library, sizeof(entry_by_name->library));
|
||||
entry_by_name->library[INJ_LIB_MAXLEN - 1] = '\0';
|
||||
memcpy(entry_by_name->function, function, sizeof(entry_by_name->function));
|
||||
strlcpy(entry_by_name->function, function, sizeof(entry_by_name->function));
|
||||
entry_by_name->function[INJ_FUNC_MAXLEN - 1] = '\0';
|
||||
|
||||
LWLockRelease(InjectionPointLock);
|
||||
|
Loading…
x
Reference in New Issue
Block a user