Coverity Model Update

When reviewing Clang Static Analyzer reports against a branch that had
experimental header changes based on the Coverity model file to inform
it that KM_SLEEP allocations cannot return NULL, I found a report saying
that a KM_PUSHPAGE allocation returned NULL. The actual implementation
does not return NULL unless KM_NOSLEEP has been passed, so we backport
the correction from the experimental header changes to the Coverity
model.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14210
This commit is contained in:
Richard Yao 2022-10-19 16:28:52 -04:00 committed by Brian Behlendorf
parent 97fac0fb70
commit eb1ed2a66b

View File

@ -24,6 +24,8 @@
#include <stdarg.h> #include <stdarg.h>
#define KM_NOSLEEP 0x0001 /* cannot block for memory; may fail */
#define UMEM_DEFAULT 0x0000 /* normal -- may fail */ #define UMEM_DEFAULT 0x0000 /* normal -- may fail */
#define UMEM_NOFAIL 0x0100 /* Never fails */ #define UMEM_NOFAIL 0x0100 /* Never fails */
@ -173,7 +175,7 @@ spl_kmem_alloc(size_t sz, int fl, const char *func, int line)
if (condition1) if (condition1)
__coverity_sleep__(); __coverity_sleep__();
if ((fl == 0) || condition0) { if (((fl & KM_NOSLEEP) != KM_NOSLEEP) || condition0) {
void *buf = __coverity_alloc__(sz); void *buf = __coverity_alloc__(sz);
__coverity_mark_as_uninitialized_buffer__(buf); __coverity_mark_as_uninitialized_buffer__(buf);
__coverity_mark_as_afm_allocated__(buf, "spl_kmem_free"); __coverity_mark_as_afm_allocated__(buf, "spl_kmem_free");
@ -194,7 +196,7 @@ spl_kmem_zalloc(size_t sz, int fl, const char *func, int line)
if (condition1) if (condition1)
__coverity_sleep__(); __coverity_sleep__();
if ((fl == 0) || condition0) { if (((fl & KM_NOSLEEP) != KM_NOSLEEP) || condition0) {
void *buf = __coverity_alloc__(sz); void *buf = __coverity_alloc__(sz);
__coverity_writeall0__(buf); __coverity_writeall0__(buf);
__coverity_mark_as_afm_allocated__(buf, "spl_kmem_free"); __coverity_mark_as_afm_allocated__(buf, "spl_kmem_free");
@ -276,7 +278,7 @@ spl_vmem_alloc(size_t sz, int fl, const char *func, int line)
if (condition1) if (condition1)
__coverity_sleep__(); __coverity_sleep__();
if ((fl == 0) || condition0) { if (((fl & KM_NOSLEEP) != KM_NOSLEEP) || condition0) {
void *buf = __coverity_alloc__(sz); void *buf = __coverity_alloc__(sz);
__coverity_mark_as_uninitialized_buffer__(buf); __coverity_mark_as_uninitialized_buffer__(buf);
__coverity_mark_as_afm_allocated__(buf, "spl_vmem_free"); __coverity_mark_as_afm_allocated__(buf, "spl_vmem_free");
@ -295,7 +297,7 @@ spl_vmem_zalloc(size_t sz, int fl, const char *func, int line)
if (condition1) if (condition1)
__coverity_sleep__(); __coverity_sleep__();
if ((fl == 0) || condition0) { if (((fl & KM_NOSLEEP) != KM_NOSLEEP) || condition0) {
void *buf = __coverity_alloc__(sz); void *buf = __coverity_alloc__(sz);
__coverity_writeall0__(buf); __coverity_writeall0__(buf);
__coverity_mark_as_afm_allocated__(buf, "spl_vmem_free"); __coverity_mark_as_afm_allocated__(buf, "spl_vmem_free");