CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: Nicolai Stange <[email protected]> CC: Herbert Xu <[email protected]> CC: Hannes Reinecke <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: c00c5e1d157bec0ef0b0b59aa5482eb8dc7e8e49 commit: 1e207964566738b49b003e80063fd712af75b82c crypto: dh - implement private key generation primitive for ffdheXYZ(dh) date: 7 weeks ago :::::: branch date: 15 hours ago :::::: commit date: 7 weeks ago config: riscv-randconfig-c006-20220418 (https://download.01.org/0day-ci/archive/20220424/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project ef94609d6ebe981767788e6877b0b3b731d425af) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1e207964566738b49b003e80063fd712af75b82c git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 1e207964566738b49b003e80063fd712af75b82c # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~ init/main.c:642:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(saved_command_line + xlen, boot_command_line); ^~~~~~ init/main.c:643:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(static_command_line + xlen, command_line); ^~~~~~ init/main.c:643:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(static_command_line + xlen, command_line); ^~~~~~ init/main.c:655:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(saved_command_line + len, extra_init_args); ^~~~~~ init/main.c:655:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(saved_command_line + len, extra_init_args); ^~~~~~ init/main.c:657:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(saved_command_line + len, ^~~~~~ init/main.c:657:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(saved_command_line + len, ^~~~~~ init/main.c:661:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(saved_command_line + len, " -- "); ^~~~~~ init/main.c:661:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(saved_command_line + len, " -- "); ^~~~~~ init/main.c:663:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(saved_command_line + len, extra_init_args); ^~~~~~ init/main.c:663:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(saved_command_line + len, extra_init_args); ^~~~~~ init/main.c:1188:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(entry->buf, str_entry); ^~~~~~ init/main.c:1188:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(entry->buf, str_entry); ^~~~~~ init/main.c:1388:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(command_line, saved_command_line); ^~~~~~ init/main.c:1388:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(command_line, saved_command_line); ^~~~~~ Suppressed 14 warnings (11 in non-user code, 3 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. >> crypto/dh.c:438:9: warning: Potential leak of memory pointed to by 'key' >> [clang-analyzer-unix.Malloc] return ERR_PTR(err); ^ crypto/dh.c:358:6: note: '?' condition is false n = roundup_pow_of_two(2 * safe_prime->max_strength); ^ include/linux/log2.h:176:2: note: expanded from macro 'roundup_pow_of_two' __builtin_constant_p(n) ? ( \ ^ crypto/dh.c:359:2: note: '?' condition is false WARN_ON_ONCE(n & ((1u << 6) - 1)); ^ include/asm-generic/bug.h:105:2: note: expanded from macro 'WARN_ON_ONCE' if (unlikely(__ret_warn_on)) \ ^ include/linux/compiler.h:56:28: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^ include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var' #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) ^ crypto/dh.c:359:2: note: '?' condition is true WARN_ON_ONCE(n & ((1u << 6) - 1)); ^ include/asm-generic/bug.h:105:2: note: expanded from macro 'WARN_ON_ONCE' if (unlikely(__ret_warn_on)) \ ^ include/linux/compiler.h:56:28: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^ include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var' #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) ^ include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value' (cond) ? \ ^ crypto/dh.c:359:2: note: Taking true branch WARN_ON_ONCE(n & ((1u << 6) - 1)); ^ include/asm-generic/bug.h:105:2: note: expanded from macro 'WARN_ON_ONCE' if (unlikely(__ret_warn_on)) \ ^ include/linux/compiler.h:56:23: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^ crypto/dh.c:359:2: note: Loop condition is false. Exiting loop WARN_ON_ONCE(n & ((1u << 6) - 1)); ^ include/asm-generic/bug.h:106:3: note: expanded from macro 'WARN_ON_ONCE' __WARN_FLAGS(BUGFLAG_ONCE | \ ^ arch/riscv/include/asm/bug.h:79:29: note: expanded from macro '__WARN_FLAGS' #define __WARN_FLAGS(flags) __BUG_FLAGS(BUGFLAG_WARNING|(flags)) ^ arch/riscv/include/asm/bug.h:53:32: note: expanded from macro '__BUG_FLAGS' #define __BUG_FLAGS(flags) \ ^ crypto/dh.c:367:8: note: Memory is allocated key = kmalloc(oversampling_size, GFP_KERNEL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ crypto/dh.c:368:6: note: Assuming 'key' is non-null if (!key) ^ include/linux/compiler.h:56:47: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^~~~ include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var' #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) ^~~~ crypto/dh.c:368:2: note: '?' condition is false if (!key) ^ include/linux/compiler.h:56:28: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^ include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var' #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) ^ crypto/dh.c:368:7: note: 'key' is non-null if (!key) ^ include/linux/compiler.h:56:47: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^~~~ include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var' #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) ^~~~ include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value' (cond) ? \ ^~~~ crypto/dh.c:368:2: note: '?' condition is false if (!key) ^ include/linux/compiler.h:56:28: note: expanded from macro 'if' #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) ^ include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var' #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) ^ include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value' (cond) ? \ vim +/key +438 crypto/dh.c 1e207964566738 Nicolai Stange 2022-02-21 333 1e207964566738 Nicolai Stange 2022-02-21 334 static void *dh_safe_prime_gen_privkey(const struct dh_safe_prime *safe_prime, 1e207964566738 Nicolai Stange 2022-02-21 335 unsigned int *key_size) 1e207964566738 Nicolai Stange 2022-02-21 336 { 1e207964566738 Nicolai Stange 2022-02-21 337 unsigned int n, oversampling_size; 1e207964566738 Nicolai Stange 2022-02-21 338 __be64 *key; 1e207964566738 Nicolai Stange 2022-02-21 339 int err; 1e207964566738 Nicolai Stange 2022-02-21 340 u64 h, o; 1e207964566738 Nicolai Stange 2022-02-21 341 1e207964566738 Nicolai Stange 2022-02-21 342 /* 1e207964566738 Nicolai Stange 2022-02-21 343 * Generate a private key following NIST SP800-56Ar3, 1e207964566738 Nicolai Stange 2022-02-21 344 * sec. 5.6.1.1.1 and 5.6.1.1.3 resp.. 1e207964566738 Nicolai Stange 2022-02-21 345 * 1e207964566738 Nicolai Stange 2022-02-21 346 * 5.6.1.1.1: choose key length N such that 1e207964566738 Nicolai Stange 2022-02-21 347 * 2 * ->max_strength <= N <= log2(q) + 1 = ->p_size * 8 - 1 1e207964566738 Nicolai Stange 2022-02-21 348 * with q = (p - 1) / 2 for the safe-prime groups. 1e207964566738 Nicolai Stange 2022-02-21 349 * Choose the lower bound's next power of two for N in order to 1e207964566738 Nicolai Stange 2022-02-21 350 * avoid excessively large private keys while still 1e207964566738 Nicolai Stange 2022-02-21 351 * maintaining some extra reserve beyond the bare minimum in 1e207964566738 Nicolai Stange 2022-02-21 352 * most cases. Note that for each entry in safe_prime_groups[], 1e207964566738 Nicolai Stange 2022-02-21 353 * the following holds for such N: 1e207964566738 Nicolai Stange 2022-02-21 354 * - N >= 256, in particular it is a multiple of 2^6 = 64 1e207964566738 Nicolai Stange 2022-02-21 355 * bits and 1e207964566738 Nicolai Stange 2022-02-21 356 * - N < log2(q) + 1, i.e. N respects the upper bound. 1e207964566738 Nicolai Stange 2022-02-21 357 */ 1e207964566738 Nicolai Stange 2022-02-21 358 n = roundup_pow_of_two(2 * safe_prime->max_strength); 1e207964566738 Nicolai Stange 2022-02-21 359 WARN_ON_ONCE(n & ((1u << 6) - 1)); 1e207964566738 Nicolai Stange 2022-02-21 360 n >>= 6; /* Convert N into units of u64. */ 1e207964566738 Nicolai Stange 2022-02-21 361 1e207964566738 Nicolai Stange 2022-02-21 362 /* 1e207964566738 Nicolai Stange 2022-02-21 363 * Reserve one extra u64 to hold the extra random bits 1e207964566738 Nicolai Stange 2022-02-21 364 * required as per 5.6.1.1.3. 1e207964566738 Nicolai Stange 2022-02-21 365 */ 1e207964566738 Nicolai Stange 2022-02-21 366 oversampling_size = (n + 1) * sizeof(__be64); 1e207964566738 Nicolai Stange 2022-02-21 367 key = kmalloc(oversampling_size, GFP_KERNEL); 1e207964566738 Nicolai Stange 2022-02-21 368 if (!key) 1e207964566738 Nicolai Stange 2022-02-21 369 return ERR_PTR(-ENOMEM); 1e207964566738 Nicolai Stange 2022-02-21 370 1e207964566738 Nicolai Stange 2022-02-21 371 /* 1e207964566738 Nicolai Stange 2022-02-21 372 * 5.6.1.1.3, step 3 (and implicitly step 4): obtain N + 64 1e207964566738 Nicolai Stange 2022-02-21 373 * random bits and interpret them as a big endian integer. 1e207964566738 Nicolai Stange 2022-02-21 374 */ 1e207964566738 Nicolai Stange 2022-02-21 375 err = -EFAULT; 1e207964566738 Nicolai Stange 2022-02-21 376 if (crypto_get_default_rng()) 1e207964566738 Nicolai Stange 2022-02-21 377 goto out_err; 1e207964566738 Nicolai Stange 2022-02-21 378 1e207964566738 Nicolai Stange 2022-02-21 379 err = crypto_rng_get_bytes(crypto_default_rng, (u8 *)key, 1e207964566738 Nicolai Stange 2022-02-21 380 oversampling_size); 1e207964566738 Nicolai Stange 2022-02-21 381 crypto_put_default_rng(); 1e207964566738 Nicolai Stange 2022-02-21 382 if (err) 1e207964566738 Nicolai Stange 2022-02-21 383 goto out_err; 1e207964566738 Nicolai Stange 2022-02-21 384 1e207964566738 Nicolai Stange 2022-02-21 385 /* 1e207964566738 Nicolai Stange 2022-02-21 386 * 5.6.1.1.3, step 5 is implicit: 2^N < q and thus, 1e207964566738 Nicolai Stange 2022-02-21 387 * M = min(2^N, q) = 2^N. 1e207964566738 Nicolai Stange 2022-02-21 388 * 1e207964566738 Nicolai Stange 2022-02-21 389 * For step 6, calculate 1e207964566738 Nicolai Stange 2022-02-21 390 * key = (key[] mod (M - 1)) + 1 = (key[] mod (2^N - 1)) + 1. 1e207964566738 Nicolai Stange 2022-02-21 391 * 1e207964566738 Nicolai Stange 2022-02-21 392 * In order to avoid expensive divisions, note that 1e207964566738 Nicolai Stange 2022-02-21 393 * 2^N mod (2^N - 1) = 1 and thus, for any integer h, 1e207964566738 Nicolai Stange 2022-02-21 394 * 2^N * h mod (2^N - 1) = h mod (2^N - 1) always holds. 1e207964566738 Nicolai Stange 2022-02-21 395 * The big endian integer key[] composed of n + 1 64bit words 1e207964566738 Nicolai Stange 2022-02-21 396 * may be written as key[] = h * 2^N + l, with h = key[0] 1e207964566738 Nicolai Stange 2022-02-21 397 * representing the 64 most significant bits and l 1e207964566738 Nicolai Stange 2022-02-21 398 * corresponding to the remaining 2^N bits. With the remark 1e207964566738 Nicolai Stange 2022-02-21 399 * from above, 1e207964566738 Nicolai Stange 2022-02-21 400 * h * 2^N + l mod (2^N - 1) = l + h mod (2^N - 1). 1e207964566738 Nicolai Stange 2022-02-21 401 * As both, l and h are less than 2^N, their sum after 1e207964566738 Nicolai Stange 2022-02-21 402 * this first reduction is guaranteed to be <= 2^(N + 1) - 2. 1e207964566738 Nicolai Stange 2022-02-21 403 * Or equivalently, that their sum can again be written as 1e207964566738 Nicolai Stange 2022-02-21 404 * h' * 2^N + l' with h' now either zero or one and if one, 1e207964566738 Nicolai Stange 2022-02-21 405 * then l' <= 2^N - 2. Thus, all bits at positions >= N will 1e207964566738 Nicolai Stange 2022-02-21 406 * be zero after a second reduction: 1e207964566738 Nicolai Stange 2022-02-21 407 * h' * 2^N + l' mod (2^N - 1) = l' + h' mod (2^N - 1). 1e207964566738 Nicolai Stange 2022-02-21 408 * At this point, it is still possible that 1e207964566738 Nicolai Stange 2022-02-21 409 * l' + h' = 2^N - 1, i.e. that l' + h' mod (2^N - 1) 1e207964566738 Nicolai Stange 2022-02-21 410 * is zero. This condition will be detected below by means of 1e207964566738 Nicolai Stange 2022-02-21 411 * the final increment overflowing in this case. 1e207964566738 Nicolai Stange 2022-02-21 412 */ 1e207964566738 Nicolai Stange 2022-02-21 413 h = be64_to_cpu(key[0]); 1e207964566738 Nicolai Stange 2022-02-21 414 h = __add_u64_to_be(key + 1, n, h); 1e207964566738 Nicolai Stange 2022-02-21 415 h = __add_u64_to_be(key + 1, n, h); 1e207964566738 Nicolai Stange 2022-02-21 416 WARN_ON_ONCE(h); 1e207964566738 Nicolai Stange 2022-02-21 417 1e207964566738 Nicolai Stange 2022-02-21 418 /* Increment to obtain the final result. */ 1e207964566738 Nicolai Stange 2022-02-21 419 o = __add_u64_to_be(key + 1, n, 1); 1e207964566738 Nicolai Stange 2022-02-21 420 /* 1e207964566738 Nicolai Stange 2022-02-21 421 * The overflow bit o from the increment is either zero or 1e207964566738 Nicolai Stange 2022-02-21 422 * one. If zero, key[1:n] holds the final result in big-endian 1e207964566738 Nicolai Stange 2022-02-21 423 * order. If one, key[1:n] is zero now, but needs to be set to 1e207964566738 Nicolai Stange 2022-02-21 424 * one, c.f. above. 1e207964566738 Nicolai Stange 2022-02-21 425 */ 1e207964566738 Nicolai Stange 2022-02-21 426 if (o) 1e207964566738 Nicolai Stange 2022-02-21 427 key[n] = cpu_to_be64(1); 1e207964566738 Nicolai Stange 2022-02-21 428 1e207964566738 Nicolai Stange 2022-02-21 429 /* n is in units of u64, convert to bytes. */ 1e207964566738 Nicolai Stange 2022-02-21 430 *key_size = n << 3; 1e207964566738 Nicolai Stange 2022-02-21 431 /* Strip the leading extra __be64, which is (virtually) zero by now. */ 1e207964566738 Nicolai Stange 2022-02-21 432 memmove(key, &key[1], *key_size); 1e207964566738 Nicolai Stange 2022-02-21 433 1e207964566738 Nicolai Stange 2022-02-21 434 return key; 1e207964566738 Nicolai Stange 2022-02-21 435 1e207964566738 Nicolai Stange 2022-02-21 436 out_err: 1e207964566738 Nicolai Stange 2022-02-21 437 kfree_sensitive(key); 1e207964566738 Nicolai Stange 2022-02-21 @438 return ERR_PTR(err); 1e207964566738 Nicolai Stange 2022-02-21 439 } 1e207964566738 Nicolai Stange 2022-02-21 440 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
