]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 25 Sep 2021 11:50:17 +0000 (13:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 25 Sep 2021 11:50:17 +0000 (13:50 +0200)
added patches:
tools-lib-adopt-memchr_inv-from-kernel.patch

queue-5.10/series
queue-5.10/tools-lib-adopt-memchr_inv-from-kernel.patch [new file with mode: 0644]

index 89f8ed04cd2c6b5c43449feae3fa9885a5118c7a..c7e8e7fdb694188f93291e68f900a6f7fb3f75ac 100644 (file)
@@ -15,6 +15,7 @@ coredump-fix-memleak-in-dump_vma_snapshot.patch
 um-virtio_uml-fix-memory-leak-on-init-failures.patch
 dmaengine-acpi-avoid-comparison-gsi-with-linux-virq.patch
 perf-test-fix-bpf-test-sample-mismatch-reporting.patch
+tools-lib-adopt-memchr_inv-from-kernel.patch
 perf-tools-allow-build-id-with-trailing-zeros.patch
 thermal-drivers-exynos-fix-an-error-code-in-exynos_tmu_probe.patch
 9p-trans_virtio-remove-sysfs-file-on-probe-failure.patch
diff --git a/queue-5.10/tools-lib-adopt-memchr_inv-from-kernel.patch b/queue-5.10/tools-lib-adopt-memchr_inv-from-kernel.patch
new file mode 100644 (file)
index 0000000..c33eabd
--- /dev/null
@@ -0,0 +1,104 @@
+From b3e453272d436aab8adbe810c6d7043670281487 Mon Sep 17 00:00:00 2001
+From: Jiri Olsa <jolsa@kernel.org>
+Date: Thu, 26 Nov 2020 18:00:06 +0100
+Subject: tools lib: Adopt memchr_inv() from kernel
+
+From: Jiri Olsa <jolsa@kernel.org>
+
+commit b3e453272d436aab8adbe810c6d7043670281487 upstream.
+
+We'll use it to check for undefined/zero data.
+
+Signed-off-by: Jiri Olsa <jolsa@kernel.org>
+Suggested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Acked-by: Namhyung Kim <namhyung@kernel.org>
+Cc: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
+Cc: Andi Kleen <ak@linux.intel.com>
+Cc: Ian Rogers <irogers@google.com>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Cc: Michael Petlan <mpetlan@redhat.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Song Liu <songliubraving@fb.com>
+Cc: Stephane Eranian <eranian@google.com>
+Link: http://lore.kernel.org/lkml/20201126170026.2619053-6-jolsa@kernel.org
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/include/linux/string.h |    1 
+ tools/lib/string.c           |   58 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 59 insertions(+)
+
+--- a/tools/include/linux/string.h
++++ b/tools/include/linux/string.h
+@@ -46,4 +46,5 @@ extern char * __must_check skip_spaces(c
+ extern char *strim(char *);
++extern void *memchr_inv(const void *start, int c, size_t bytes);
+ #endif /* _TOOLS_LINUX_STRING_H_ */
+--- a/tools/lib/string.c
++++ b/tools/lib/string.c
+@@ -168,3 +168,61 @@ char *strreplace(char *s, char old, char
+                       *s = new;
+       return s;
+ }
++
++static void *check_bytes8(const u8 *start, u8 value, unsigned int bytes)
++{
++      while (bytes) {
++              if (*start != value)
++                      return (void *)start;
++              start++;
++              bytes--;
++      }
++      return NULL;
++}
++
++/**
++ * memchr_inv - Find an unmatching character in an area of memory.
++ * @start: The memory area
++ * @c: Find a character other than c
++ * @bytes: The size of the area.
++ *
++ * returns the address of the first character other than @c, or %NULL
++ * if the whole buffer contains just @c.
++ */
++void *memchr_inv(const void *start, int c, size_t bytes)
++{
++      u8 value = c;
++      u64 value64;
++      unsigned int words, prefix;
++
++      if (bytes <= 16)
++              return check_bytes8(start, value, bytes);
++
++      value64 = value;
++      value64 |= value64 << 8;
++      value64 |= value64 << 16;
++      value64 |= value64 << 32;
++
++      prefix = (unsigned long)start % 8;
++      if (prefix) {
++              u8 *r;
++
++              prefix = 8 - prefix;
++              r = check_bytes8(start, value, prefix);
++              if (r)
++                      return r;
++              start += prefix;
++              bytes -= prefix;
++      }
++
++      words = bytes / 8;
++
++      while (words) {
++              if (*(u64 *)start != value64)
++                      return check_bytes8(start, value, 8);
++              start += 8;
++              words--;
++      }
++
++      return check_bytes8(start, value, bytes % 8);
++}