Thanks to Fernando Soto at BlueCat Networks for reporting the issue.
[ISC-Bugs #43219]
+- When memory allocation fails in a repeated way the process writes
+ "Run out of memory." on the standard error and exists with status 1.
+ [ISC-Bugs #32744]
+
Changes since 4.1-ESV-R14b1
- None
static void print_rc_hist_entry (int);
#endif
+static int dmalloc_failures;
+static char out_of_memory[] = "Run out of memory.";
+
void *
dmalloc(size_t size, const char *file, int line) {
unsigned char *foo;
foo = malloc(len);
- if (!foo)
+ if (!foo) {
+ dmalloc_failures++;
+ if (dmalloc_failures > 10) {
+ /* In case log_fatal() returns here */
+ IGNORE_RET(write(STDERR_FILENO,
+ out_of_memory,
+ strlen(out_of_memory)));
+ IGNORE_RET(write(STDERR_FILENO, "\n", 1));
+ exit(1);
+ } else if (dmalloc_failures >= 10) {
+ /* Something went wrong beyond repair. */
+ log_fatal("Fatal error: out of memory.");
+ }
return NULL;
+ }
bar = (void *)(foo + DMDOFFSET);
memset (bar, 0, size);