|
129 | 129 | #ifndef WC_LINUXKM_INTR_SIGNALS |
130 | 130 | #define WC_LINUXKM_INTR_SIGNALS { SIGKILL, SIGABRT, SIGHUP, SIGINT } |
131 | 131 | #endif |
| 132 | + extern int wc_linuxkm_sig_ignore_begin(void); |
| 133 | + extern int wc_linuxkm_sig_ignore_end(void); |
132 | 134 | extern int wc_linuxkm_check_for_intr_signals(void); |
133 | 135 | #ifndef WC_LINUXKM_MAX_NS_WITHOUT_YIELD |
134 | 136 | #define WC_LINUXKM_MAX_NS_WITHOUT_YIELD 1000000000 |
135 | 137 | #endif |
136 | 138 | extern void wc_linuxkm_relax_long_loop(void); |
137 | 139 |
|
| 140 | + #ifndef WC_SIG_IGNORE_BEGIN |
| 141 | + #define WC_SIG_IGNORE_BEGIN() wc_linuxkm_sig_ignore_begin() |
| 142 | + #endif |
| 143 | + #ifndef WC_SIG_IGNORE_END |
| 144 | + #define WC_SIG_IGNORE_END() wc_linuxkm_sig_ignore_end() |
| 145 | + #endif |
| 146 | + #ifndef WC_CHECK_FOR_INTR_SIGNALS |
| 147 | + #define WC_CHECK_FOR_INTR_SIGNALS() wc_linuxkm_check_for_intr_signals() |
| 148 | + #endif |
| 149 | + #ifndef WC_RELAX_LONG_LOOP |
| 150 | + #define WC_RELAX_LONG_LOOP() wc_linuxkm_relax_long_loop() |
| 151 | + #endif |
| 152 | + |
138 | 153 | enum wc_svr_flags { |
139 | 154 | WC_SVR_FLAG_NONE = 0, |
140 | 155 | WC_SVR_FLAG_INHIBIT = 1, |
|
211 | 226 | _Pragma("GCC diagnostic push"); |
212 | 227 |
|
213 | 228 | /* we include all the needed kernel headers with these masked out. else |
214 | | - * there are profuse warnings. |
| 229 | + * there are profuse warnings, especially on older kernels. |
215 | 230 | */ |
216 | 231 | _Pragma("GCC diagnostic ignored \"-Wunused-parameter\""); |
217 | 232 | _Pragma("GCC diagnostic ignored \"-Wpointer-arith\""); |
|
225 | 240 | _Pragma("GCC diagnostic ignored \"-Wtype-limits\""); |
226 | 241 | _Pragma("GCC diagnostic ignored \"-Wswitch-enum\""); |
227 | 242 | _Pragma("GCC diagnostic ignored \"-Wcast-function-type\""); /* needed for kernel 4.14.336 */ |
| 243 | + _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\""); /* needed for kernel 4.9.282 */ |
228 | 244 |
|
229 | 245 | #include <linux/kconfig.h> |
230 | 246 |
|
|
432 | 448 | #endif |
433 | 449 | #include <linux/random.h> |
434 | 450 |
|
435 | | - #ifndef __PIE__ |
436 | | - #if defined(WOLFSSL_LINUXKM_USE_GET_RANDOM_KPROBES) || defined(FIPS_OPTEST) |
437 | | - #include <linux/kprobes.h> |
438 | | - #endif |
| 451 | + #if !defined(__PIE__) && defined(CONFIG_HAVE_KPROBES) |
| 452 | + #include <linux/kprobes.h> |
439 | 453 | #endif |
440 | 454 |
|
441 | 455 | #ifdef LINUXKM_LKCAPI_REGISTER |
|
489 | 503 | #endif /* !__PIE__ */ |
490 | 504 | #endif /* LINUXKM_LKCAPI_REGISTER */ |
491 | 505 |
|
492 | | - #ifndef WC_CHECK_FOR_INTR_SIGNALS |
493 | | - #define WC_CHECK_FOR_INTR_SIGNALS() wc_linuxkm_check_for_intr_signals() |
494 | | - #endif |
495 | | - #ifndef WC_RELAX_LONG_LOOP |
496 | | - #define WC_RELAX_LONG_LOOP() wc_linuxkm_relax_long_loop() |
497 | | - #endif |
498 | | - |
499 | 506 | /* benchmarks.c uses floating point math, so needs a working |
500 | 507 | * SAVE_VECTOR_REGISTERS(). |
501 | 508 | */ |
|
980 | 987 | typeof(wc_lkm_LockMutex) *wc_lkm_LockMutex; |
981 | 988 | #endif |
982 | 989 |
|
| 990 | + typeof(wc_linuxkm_sig_ignore_begin) *wc_linuxkm_sig_ignore_begin; |
| 991 | + typeof(wc_linuxkm_sig_ignore_end) *wc_linuxkm_sig_ignore_end; |
983 | 992 | typeof(wc_linuxkm_check_for_intr_signals) *wc_linuxkm_check_for_intr_signals; |
984 | 993 | typeof(wc_linuxkm_relax_long_loop) *wc_linuxkm_relax_long_loop; |
985 | 994 |
|
|
1220 | 1229 | */ |
1221 | 1230 | #define spin_unlock_irqrestore(lock, flags) raw_spin_unlock_irqrestore(&((lock)->rlock), flags) |
1222 | 1231 |
|
| 1232 | + #define wc_linuxkm_sig_ignore_begin WC_LKM_INDIRECT_SYM(wc_linuxkm_sig_ignore_begin); |
| 1233 | + #define wc_linuxkm_sig_ignore_end WC_LKM_INDIRECT_SYM(wc_linuxkm_sig_ignore_end); |
1223 | 1234 | #define wc_linuxkm_check_for_intr_signals WC_LKM_INDIRECT_SYM(wc_linuxkm_check_for_intr_signals) |
1224 | 1235 | #define wc_linuxkm_relax_long_loop WC_LKM_INDIRECT_SYM(wc_linuxkm_relax_long_loop) |
1225 | 1236 |
|
|
0 commit comments