https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=291677

Brooks Davis <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|kern                        |bin
                 CC|                            |[email protected]
           Assignee|[email protected]            |[email protected]

--- Comment #1 from Brooks Davis <[email protected]> ---
Sigh.  It looks like jemalloc refactored realloc() to use rallocx's internals
in the common case and didn't account for the need to set errno.  The following
untested patch likely fixes it (it might not be the best fix, but I think it
does the job). Over all this doesn't give me great confidence in the
correctness of this whole update. :(

```
diff --git a/contrib/jemalloc/src/jemalloc.c b/contrib/jemalloc/src/jemalloc.c
index e4b183d1a24d..30ad6bab44f0 100644
--- a/contrib/jemalloc/src/jemalloc.c
+++ b/contrib/jemalloc/src/jemalloc.c
@@ -3630,11 +3630,9 @@ je_realloc(void *ptr, size_t size) {
        if (likely(ptr != NULL && size != 0)) {
                void *ret = do_rallocx(ptr, size, 0, true);
                LOG("core.realloc.exit", "result: %p", ret);
-               return ret;
        } else if (ptr != NULL && size == 0) {
                void *ret = do_realloc_nonnull_zero(ptr);
                LOG("core.realloc.exit", "result: %p", ret);
-               return ret;
        } else {
                /* realloc(NULL, size) is equivalent to malloc(size). */
                void *ret;
@@ -3663,6 +3661,12 @@ je_realloc(void *ptr, size_t size) {
                LOG("core.realloc.exit", "result: %p", ret);
                return ret;
        }
+
+       if (unlikely(ret == NULL)) {
+               set_errno(ENOMEM);
+       }
+
+       return ret;
 }

 JEMALLOC_ALWAYS_INLINE size_t
```

(Category reset to bin as this isn't a kernel issue)

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to