summarylogtreecommitdiffstats
path: root/openonload-201606-bug63982-ilog2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'openonload-201606-bug63982-ilog2.patch')
-rw-r--r--openonload-201606-bug63982-ilog2.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/openonload-201606-bug63982-ilog2.patch b/openonload-201606-bug63982-ilog2.patch
new file mode 100644
index 000000000000..dc6414d51eec
--- /dev/null
+++ b/openonload-201606-bug63982-ilog2.patch
@@ -0,0 +1,31 @@
+diff --git a/src/lib/efrm/vi_resource_alloc.c b/src/lib/efrm/vi_resource_alloc.c
+--- a/src/lib/efrm/vi_resource_alloc.c
++++ b/src/lib/efrm/vi_resource_alloc.c
+@@ -1432,6 +1432,15 @@
+
+ qso->q_len_entries = n_q_entries;
+ qso->q_len_bytes = efrm_vi_q_bytes(virs, q_type, n_q_entries);
++
++ /* This value should always be positive, but if we don't check for this
++ * explicitly, some compilers will assume that undefined logarithms
++ * can be taken in get_order() and will generate code that won't link.
++ * See bug63982. */
++ EFRM_ASSERT(qso->q_len_bytes > 0);
++ if (qso->q_len_bytes <= 0)
++ return -EINVAL;
++
+ qso->q_len_page_order = get_order(qso->q_len_bytes);
+ return 0;
+ }
+--- a/src/include/onload/version.h
++++ b/src/include/onload/version.h
+@@ -29,7 +29,7 @@
+
+
+ #ifndef ONLOAD_VERSION
+-# define ONLOAD_VERSION "201606"
++# define ONLOAD_VERSION "201606-patch63982"
+ #endif
+
+ #define ONLOAD_PRODUCT "OpenOnload"
+