In the Linux kernel, the following vulnerability has been resolved:
unicode: Fix utf8_load() error path
utf8load() requests the symbol "utf8datatable" and then checks if the requested UTF-8 version is supported. If it's unsupported, it tries to put the data table using symbolput(). If an unsupported version is requested, symbol_put() fails like this:
kernel BUG at kernel/module/main.c:786! RIP: 0010:_symbolput+0x93/0xb0 Call Trace: <TASK> ? _diebody.cold+0x19/0x27 ? die+0x2e/0x50 ? dotrap+0xca/0x110 ? doerrortrap+0x65/0x80 ? _symbolput+0x93/0xb0 ? excinvalidop+0x51/0x70 ? _symbolput+0x93/0xb0 ? asmexcinvalidop+0x1a/0x20 ? _pfxcmpname+0x10/0x10 ? _symbolput+0x93/0xb0 ? _symbolput+0x62/0xb0 utf8load+0xf8/0x150
That happens because symbol_put() expects the unique string that identify the symbol, instead of a pointer to the loaded symbol. Fix that by using such string.