You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar: "A handful of tooling fixes, two PMU driver fixes and a cleanup of redundant code that addresses a security analyzer false positive" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/core: Remove a redundant check perf/x86/intel/uncore: Remove SBOX support for Broadwell server perf ctf: Convert invalid chars in a string before set value perf record: Fix crash when kptr is restricted perf symbols: Check kptr_restrict for root perf/x86/intel/rapl: Fix pmus free during cleanup
This commit is contained in:
@@ -204,6 +204,44 @@ static unsigned long long adjust_signedness(unsigned long long value_int, int si
|
||||
return (value_int & value_mask) | ~value_mask;
|
||||
}
|
||||
|
||||
static int string_set_value(struct bt_ctf_field *field, const char *string)
|
||||
{
|
||||
char *buffer = NULL;
|
||||
size_t len = strlen(string), i, p;
|
||||
int err;
|
||||
|
||||
for (i = p = 0; i < len; i++, p++) {
|
||||
if (isprint(string[i])) {
|
||||
if (!buffer)
|
||||
continue;
|
||||
buffer[p] = string[i];
|
||||
} else {
|
||||
char numstr[5];
|
||||
|
||||
snprintf(numstr, sizeof(numstr), "\\x%02x",
|
||||
(unsigned int)(string[i]) & 0xff);
|
||||
|
||||
if (!buffer) {
|
||||
buffer = zalloc(i + (len - i) * 4 + 2);
|
||||
if (!buffer) {
|
||||
pr_err("failed to set unprintable string '%s'\n", string);
|
||||
return bt_ctf_field_string_set_value(field, "UNPRINTABLE-STRING");
|
||||
}
|
||||
if (i > 0)
|
||||
strncpy(buffer, string, i);
|
||||
}
|
||||
strncat(buffer + p, numstr, 4);
|
||||
p += 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
return bt_ctf_field_string_set_value(field, string);
|
||||
err = bt_ctf_field_string_set_value(field, buffer);
|
||||
free(buffer);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int add_tracepoint_field_value(struct ctf_writer *cw,
|
||||
struct bt_ctf_event_class *event_class,
|
||||
struct bt_ctf_event *event,
|
||||
@@ -270,8 +308,7 @@ static int add_tracepoint_field_value(struct ctf_writer *cw,
|
||||
}
|
||||
|
||||
if (flags & FIELD_IS_STRING)
|
||||
ret = bt_ctf_field_string_set_value(field,
|
||||
data + offset + i * len);
|
||||
ret = string_set_value(field, data + offset + i * len);
|
||||
else {
|
||||
unsigned long long value_int;
|
||||
|
||||
|
||||
@@ -673,6 +673,8 @@ int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
|
||||
int err;
|
||||
union perf_event *event;
|
||||
|
||||
if (symbol_conf.kptr_restrict)
|
||||
return -1;
|
||||
if (map == NULL)
|
||||
return -1;
|
||||
|
||||
|
||||
@@ -1933,17 +1933,17 @@ int setup_intlist(struct intlist **list, const char *list_str,
|
||||
static bool symbol__read_kptr_restrict(void)
|
||||
{
|
||||
bool value = false;
|
||||
FILE *fp = fopen("/proc/sys/kernel/kptr_restrict", "r");
|
||||
|
||||
if (geteuid() != 0) {
|
||||
FILE *fp = fopen("/proc/sys/kernel/kptr_restrict", "r");
|
||||
if (fp != NULL) {
|
||||
char line[8];
|
||||
if (fp != NULL) {
|
||||
char line[8];
|
||||
|
||||
if (fgets(line, sizeof(line), fp) != NULL)
|
||||
value = atoi(line) != 0;
|
||||
if (fgets(line, sizeof(line), fp) != NULL)
|
||||
value = (geteuid() != 0) ?
|
||||
(atoi(line) != 0) :
|
||||
(atoi(line) == 2);
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
return value;
|
||||
|
||||
Reference in New Issue
Block a user