Hi,

-------------------- sys/arch/x86/x86/cpu_ucode_intel.c --------------------

129             uh = kmem_alloc(newbufsize, KM_SLEEP);
                if (uh == NULL) {
                        printf("%s: memory allocation failed\n", __func__);
                        return EINVAL;
                }
                uh = (struct intel1_ucode_header *)roundup2((uintptr_t)uh, 16);
                /* Copy to the new area */
                memcpy(uh, sc->sc_blob, sc->sc_blobsize);
        }

        kpreempt_disable();

        intel_getcurrentucode(&oucodeversion, &platformid);
        if (oucodeversion >= ucodetarget) {
                kpreempt_enable();
                rv = EEXIST; /* ??? */
                goto out;
        }

...

out:
        if (newbufsize != 0)
                kmem_free(uh, newbufsize);
        return rv;

----------------------------------------------------------------------------

You can see that the pointer given to kmem_free() is not the one kmem_alloc
returned. Actually, I don't understand at all what this code is supposed to
do. Found by Brainy.

Maxime

Reply via email to