mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-11 10:23:31 -04:00
Use getline() to dynamically allocate the required line buffer for maps parsing, guaranteeing bounds safety and avoiding compiler warnings by evaluating the return value in the loop condition directly. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
37 lines
686 B
C
37 lines
686 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
static int find_map(void **start, void **end, const char *name)
|
|
{
|
|
FILE *maps;
|
|
char *line = NULL;
|
|
size_t len = 0;
|
|
int found = 0;
|
|
|
|
maps = fopen("/proc/self/maps", "r");
|
|
if (!maps) {
|
|
fprintf(stderr, "cannot open maps\n");
|
|
return -1;
|
|
}
|
|
|
|
while (!found && getline(&line, &len, maps) != -1) {
|
|
int m = -1;
|
|
|
|
/* We care only about private r-x mappings. */
|
|
if (2 != sscanf(line, "%p-%p r-xp %*x %*x:%*x %*u %n",
|
|
start, end, &m))
|
|
continue;
|
|
if (m < 0)
|
|
continue;
|
|
|
|
if (!strncmp(&line[m], name, strlen(name)))
|
|
found = 1;
|
|
}
|
|
|
|
free(line);
|
|
fclose(maps);
|
|
return !found;
|
|
}
|