| // SPDX-License-Identifier: GPL-2.0 |
| static int find_map(void **start, void **end, const char *name) |
| { |
| FILE *maps; |
| char line[128]; |
| int found = 0; |
| |
| maps = fopen("/proc/self/maps", "r"); |
| if (!maps) { |
| fprintf(stderr, "cannot open maps\n"); |
| return -1; |
| } |
| |
| while (!found && fgets(line, sizeof(line), maps)) { |
| 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; |
| } |
| |
| fclose(maps); |
| return !found; |
| } |