diff options
author | Hui Li <herdingcat@yahoo.com> | 2023-12-23 21:13:29 -0500 |
---|---|---|
committer | Hui Li <herdingcat@yahoo.com> | 2023-12-23 21:13:29 -0500 |
commit | 283fe6b239b140093bc142a9ff2c947dd54c754c (patch) | |
tree | 5c35b5dd2c5cda3f880735e43504a98e2e4e88cc | |
parent | f6ec8aa064f16d03ca8a9278cf9b02031a493d70 (diff) | |
download | mcelog-283fe6b239b140093bc142a9ff2c947dd54c754c.tar.gz |
assign freed pointers to NULL pointer
-rw-r--r-- | bus.c | 13 | ||||
-rw-r--r-- | cache.c | 3 | ||||
-rw-r--r-- | config.c | 10 | ||||
-rw-r--r-- | dimm.c | 1 | ||||
-rw-r--r-- | dmi.c | 1 | ||||
-rw-r--r-- | mcelog.c | 7 | ||||
-rw-r--r-- | memdb.c | 11 | ||||
-rw-r--r-- | msg.c | 2 | ||||
-rw-r--r-- | msr.c | 1 | ||||
-rw-r--r-- | page.c | 15 | ||||
-rw-r--r-- | server.c | 6 | ||||
-rw-r--r-- | sysfs.c | 7 | ||||
-rw-r--r-- | trigger.c | 7 | ||||
-rw-r--r-- | tsc.c | 4 | ||||
-rw-r--r-- | unknown.c | 6 | ||||
-rw-r--r-- | yellow.c | 6 |
16 files changed, 88 insertions, 12 deletions
@@ -69,6 +69,7 @@ void run_bus_trigger(int socket, int cpu, char *level, char *pp, char *rrrr, location, ii); xasprintf(&env[ei++], "LOCATION=%s", location); free(location); + location = NULL; if (socket >= 0) xasprintf(&env[ei++], "SOCKETID=%d", socket); @@ -83,9 +84,12 @@ void run_bus_trigger(int socket, int cpu, char *level, char *pp, char *rrrr, assert(ei < MAX_ENV); run_trigger(bus_trigger, NULL, env, false, "bus"); - for (i = 0; i < ei; i++) + for (i = 0; i < ei; i++) { free(env[i]); + env[i] = NULL; + } free(msg); + msg = NULL; } void run_iomca_trigger(int socket, int cpu, int seg, int bus, int dev, int fn) @@ -107,6 +111,7 @@ void run_iomca_trigger(int socket, int cpu, int seg, int bus, int dev, int fn) location, seg, bus, dev, fn); xasprintf(&env[ei++], "LOCATION=%s", location); free(location); + location = NULL; if (socket >= 0) xasprintf(&env[ei++], "SOCKETID=%d", socket); @@ -120,8 +125,10 @@ void run_iomca_trigger(int socket, int cpu, int seg, int bus, int dev, int fn) assert(ei < MAX_ENV); run_trigger(iomca_trigger, NULL, env, false, "iomca"); - for (i = 0; i < ei; i++) + for (i = 0; i < ei; i++) { free(env[i]); + env[i] = NULL; + } free(msg); - + msg = NULL; } @@ -108,6 +108,7 @@ static void read_cpu_map(struct cache *c, char *cfn) parse_cpumap(map, c->cpumap, c->cpumaplen); out: free(map); + map = NULL; } static int read_caches(void) @@ -144,9 +145,11 @@ static int read_caches(void) c->level = read_field_num(cfn, "level"); read_cpu_map(c, cfn); free(cfn); + cfn = NULL; } } free(fn); + fn = NULL; } } closedir(cpus); @@ -110,6 +110,7 @@ static void unparseable(char *desc, const char *header, const char *name) } Eprintf("%s config option `%s' unparseable\n", desc, field); free(field); + field = NULL; exit(1); } @@ -180,6 +181,7 @@ int parse_config_file(const char *fn) } fclose(f); free(line); + line = NULL; return 0; } @@ -302,6 +304,7 @@ int config_trigger(const char *header, const char *base, struct bucket_conf *bc) } } free(name); + name = NULL; xasprintf(&name, "%s-trigger", base); s = config_string(header, name); @@ -314,6 +317,7 @@ int config_trigger(const char *header, const char *base, struct bucket_conf *bc) bc->trigger = s; } free(name); + name = NULL; bc->log = 0; xasprintf(&name, "%s-log", base); @@ -321,6 +325,7 @@ int config_trigger(const char *header, const char *base, struct bucket_conf *bc) if (n >= 0) bc->log = n; free(name); + name = NULL; return 0; } @@ -342,6 +347,7 @@ void config_cred(char *header, char *base, struct config_cred *cred) cred->uid = pw->pw_uid; } free(name); + name = NULL; xasprintf(&name, "%s-group", base); if ((s = config_string(header, name)) != NULL) { struct group *gr; @@ -354,6 +360,7 @@ void config_cred(char *header, char *base, struct config_cred *cred) cred->gid = gr->gr_gid; } free(name); + name = NULL; } #ifdef TEST @@ -386,8 +393,11 @@ int main(int ac, char **av) break; } free(type); + type = NULL; free(header); + header = NULL; free(name); + name = NULL; } return 0; } @@ -378,6 +378,7 @@ void new_error(unsigned long long addr, unsigned long max_error, char *trigger) } } free(devs); + devs = NULL; } void reset_dimm(char *locator) @@ -667,6 +667,7 @@ void dmi_decodeaddr(unsigned long long addr) Wprintf("No DIMM found for %llx in SMBIOS\n", addr); } free(devs); + devs = NULL; } void dmi_set_verbosity(int v) @@ -165,6 +165,7 @@ static void print_tsc(int cpunum, __u64 tsc, unsigned long time) ret = decode_tsc_current(&buf, cpunum, cputype, cpumhz, tsc); Wprintf("TSC %llx %s", tsc, ret >= 0 && buf ? buf : ""); free(buf); + buf = NULL; } struct cpuid1 { @@ -477,6 +478,7 @@ int is_cpu_supported(void) } fclose(f); free(line); + line = NULL; } else Eprintf("warning: Cannot open /proc/cpuinfo\n"); @@ -805,6 +807,7 @@ restart: data = 1; } free(line); + line = NULL; if (data) dump_mce_final(&m, symbol, missing, recordlen, disclaimer_seen); } @@ -812,8 +815,10 @@ restart: static void remove_pidfile(void) { unlink(pidfile); - if (pidfile != pidfile_default) + if (pidfile != pidfile_default) { free(pidfile); + pidfile = NULL; + } } static void signal_exit(int sig) @@ -174,12 +174,17 @@ void memdb_trigger(char *msg, struct memdimm *md, time_t t, env[ei] = NULL; assert(ei < MAX_ENV); run_trigger(bc->trigger, args, env, sync, reporter); - for (i = 0; i < ei; i++) + for (i = 0; i < ei; i++) { free(env[i]); + env[i] = NULL; + } out: free(location); + location = NULL; free(out); + out = NULL; free(thresh); + thresh = NULL; } /* @@ -197,6 +202,7 @@ account_over(struct err_triggers *t, struct memdimm *md, struct mce *m, unsigned t->type, corr_err_cnt); memdb_trigger(msg, md, 0, &md->ce, &t->ce_bucket_conf, NULL, false, reporter); free(msg); + msg = NULL; } } } @@ -219,6 +225,7 @@ account_memdb(struct err_triggers *t, struct memdimm *md, struct mce *m, const c memdb_trigger(msg, md, m->time, &md->ce, &t->ce_bucket_conf, NULL, false, reporter); } free(msg); + msg = NULL; } /* @@ -281,6 +288,7 @@ static void dump_errtype(char *name, struct err_type *e, FILE *f, enum printflag s = bucket_output(bc, &e->bucket); fprintf(f, "\t%s\n", s); free(s); + s = NULL; } } @@ -343,6 +351,7 @@ void dump_memory_errors(FILE *f, enum printflags flags) dump_dimm(da[i], f, flags); } free(da); + da = NULL; } void memdb_config(void) @@ -26,6 +26,7 @@ int open_logfile(char *fn) char *old = output_fn; output_fn = xstrdup(fn); free(old); + old = NULL; return 0; } return -1; @@ -100,6 +101,7 @@ void SYSERRprintf(char *fmt, ...) xasprintf(&fmt2, "%s: %s\n", fmt, err); vsyslog(LOG_ERR, fmt2, ap); free(fmt2); + fmt2 = NULL; va_end(ap); } } @@ -56,6 +56,7 @@ static bool in_lockdown(void) if (!strstr(lockdown, "[none]")) ret = true; free(lockdown); + lockdown = NULL; return ret; } @@ -265,11 +265,15 @@ static void counter_trigger(char *msg, time_t t, struct mempage_replacement *mr, run_trigger(bc->trigger, NULL, env, sync, "page-error-counter"); - for (i = 0; i < ei; i++) + for (i = 0; i < ei; i++) { free(env[i]); + env[i] = NULL; + } out: free(out); + out = NULL; free(thresh); + thresh = NULL; } void account_page_error(struct mce *m, int channel, int dimm) @@ -323,9 +327,11 @@ void account_page_error(struct mce *m, int channel, int dimm) thresh = bucket_output(&mp_replacement_trigger_conf, &mp_repalcement.bucket); xasprintf(&msg, "Replacements of page correctable error counter exceed threshold %s", thresh); free(thresh); + thresh = NULL; counter_trigger(msg, t, &mp_repalcement, &mp_replacement_trigger_conf, false); free(msg); + msg = NULL; } } else { mempage_cluster_lru_list_update(to_cluster(mp)); @@ -342,8 +348,10 @@ void account_page_error(struct mce *m, int channel, int dimm) xasprintf(&msg, "Corrected memory errors on page %llx exceed threshold %s", addr, thresh); free(thresh); + thresh = NULL; memdb_trigger(msg, md, t, &mp->ce, &page_trigger_conf, NULL, false, "page"); free(msg); + msg = NULL; mp->triggered = 1; if (offline == OFFLINE_SOFT || offline == OFFLINE_SOFT_THEN_HARD) { @@ -365,6 +373,7 @@ void account_page_error(struct mce *m, int channel, int dimm) asprintf(&msg, "pre soft trigger run for page %lld", addr); memdb_trigger(msg, md, t, &mp->ce, &page_soft_trigger_conf, argv, true, "page_pre_soft"); free(msg); + msg = NULL; offline_action(mp, addr); @@ -375,8 +384,9 @@ void account_page_error(struct mce *m, int channel, int dimm) asprintf(&msg, "post soft trigger run for page %lld", addr); memdb_trigger(msg, md, t, &mp->ce, &page_soft_trigger_conf, argv, true, "page_post_soft"); free(msg); + msg = NULL; free(args); - + args = NULL; } else offline_action(mp, addr); } @@ -402,6 +412,7 @@ void dump_page_errors(FILE *f) page_state[(unsigned)p->offlined], p->triggered ? " triggered" : ""); free(msg); + msg = NULL; fputc('\n', f); } } @@ -70,8 +70,11 @@ static void free_inbuf(struct clientcon *cc) static void free_cc(struct clientcon *cc) { free(cc->outbuf); + cc->outbuf = NULL; free(cc->inbuf); - free(cc); + cc->inbuf = NULL; + free(cc); + cc = NULL; } static void sendstring(int fd, char *str) @@ -264,6 +267,7 @@ static void client_accept(struct pollfd *pfd, void *data) cleanup: free(cc); + cc = NULL; close(nfd); } @@ -37,6 +37,7 @@ char *read_field(char *base, char *name) xasprintf(&fn, "%s/%s", base, name); fd = open(fn, O_RDONLY); free(fn); + fn = NULL; if (fd < 0) goto bad_buf; n = read(fd, buf, 4096); @@ -47,6 +48,7 @@ char *read_field(char *base, char *name) memcpy(val, buf, n); val[n] = 0; free(buf); + buf = NULL; s = memchr(val, '\n', n); if (s) *s = 0; @@ -54,6 +56,7 @@ char *read_field(char *base, char *name) bad_buf: free(buf); + buf = NULL; SYSERRprintf("Cannot read sysfs field %s/%s", base, name); return xstrdup(""); } @@ -64,6 +67,7 @@ unsigned read_field_num(char *base, char *name) char *val = read_field(base, name); int n = sscanf(val, "%u", &num); free(val); + val = NULL; if (n != 1) { Eprintf("Cannot parse number in sysfs field %s/%s\n", base,name); return 0; @@ -81,10 +85,12 @@ unsigned read_field_map(char *base, char *name, struct map *map) } if (map->name) { free(val); + val = NULL; return map->value; } Eprintf("sysfs field %s/%s has unknown string value `%s'\n", base, name, val); free(val); + val = NULL; return -1; } @@ -104,6 +110,7 @@ int sysfs_write(const char *name, const char *fmt, ...) e = errno; close(fd); free(buf); + buf = NULL; errno = e; return n; } @@ -108,7 +108,8 @@ static void finish_child(pid_t child, int status) c->name, strsignal(WTERMSIG(status))); } list_del(&c->nd); - free(c); + free(c); + c = NULL; num_children--; return; } @@ -175,8 +176,10 @@ int trigger_check(char *s) rc = access(name, R_OK|X_OK); - if (trigger_dir) + if (trigger_dir) { free(name); + name = NULL; + } return rc; } @@ -55,6 +55,7 @@ static double cpufreq_mhz(int cpu, double infomhz) xasprintf(&fn, "/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq", cpu); f = fopen(fn, "r"); free(fn); + fn = NULL; if (!f) { /* /sys exists, but no cpufreq -- use value from cpuinfo */ if (access("/sys/devices", F_OK) == 0) @@ -87,12 +88,14 @@ static int deep_sleep_states(int cpu) xasprintf(&fn, "/sys/devices/system/cpu/cpu%d/cpuidle", cpu); ret = access(fn, X_OK); free(fn); + fn = NULL; if (ret == 0) return 1; xasprintf(&fn, "/proc/acpi/processor/CPU%d/power", cpu); f = fopen(fn, "r"); free(fn); + fn = NULL; if (!f) return 0; @@ -107,6 +110,7 @@ static int deep_sleep_states(int cpu) } } free(line); + line = NULL; fclose(f); return 0; } @@ -60,6 +60,7 @@ void run_unknown_trigger(int socket, int cpu, struct mce *log) xasprintf(&msg, "%s received unknown error", location); xasprintf(&env[ei++], "LOCATION=%s", location); free(location); + location = NULL; if (socket >= 0) xasprintf(&env[ei++], "SOCKETID=%d", socket); @@ -74,8 +75,11 @@ void run_unknown_trigger(int socket, int cpu, struct mce *log) assert(ei < MAX_ENV); run_trigger(unknown_trigger, NULL, env, false, "unknown"); - for (i = 0; i < ei; i++) + for (i = 0; i < ei; i++) { free(env[i]); + env[i] = NULL; + } free(msg); + msg = NULL; } @@ -75,6 +75,7 @@ void run_yellow_trigger(int cpu, int tnum, int lnum, char *ts, char *ls, int soc xasprintf(&msg, "%s has large number of corrected cache errors in %s %s", location, ls, ts); free(location); + location = NULL; if (yellow_log) { Lprintf("%s\n", msg); Lprintf("System operating correctly, but might lead to uncorrected cache errors soon\n"); @@ -96,10 +97,13 @@ void run_yellow_trigger(int cpu, int tnum, int lnum, char *ts, char *ls, int soc assert(ei < MAX_ENV); run_trigger(yellow_trigger, NULL, env, false, "yellow"); - for (i = 0; i < ei; i++) + for (i = 0; i < ei; i++) { free(env[i]); + env[i] = NULL; + } out: free(msg); + msg = NULL; } void yellow_setup(void) |