mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 23:24:11 +08:00
dccp: fix bug in cache allocation
This fixes a bug introduced in commit de4ef86cfc
("dccp: fix dccp rmmod when kernel configured to use slub", 17 Jan): the
vsnprintf used sizeof(slab_name_fmt), which became truncated to 4 bytes, since
slab_name_fmt is now a 4-byte pointer and no longer a 32-character array.
This lead to error messages such as
FATAL: Error inserting dccp: No buffer space available
>> kernel: [ 1456.341501] kmem_cache_create: duplicate cache cci
generated due to the truncation after the 3rd character.
Fixed for the moment by introducing a symbolic constant. Tested to fix the bug.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f6815077e7
commit
8ed030dd0a
@ -83,7 +83,7 @@ static struct kmem_cache *ccid_kmem_cache_create(int obj_size, char *slab_name_f
|
|||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vsnprintf(slab_name_fmt, sizeof(slab_name_fmt), fmt, args);
|
vsnprintf(slab_name_fmt, CCID_SLAB_NAME_LENGTH, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
slab = kmem_cache_create(slab_name_fmt, sizeof(struct ccid) + obj_size, 0,
|
slab = kmem_cache_create(slab_name_fmt, sizeof(struct ccid) + obj_size, 0,
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
||||||
#define CCID_MAX 255
|
/* maximum value for a CCID (RFC 4340, 19.5) */
|
||||||
|
#define CCID_MAX 255
|
||||||
|
#define CCID_SLAB_NAME_LENGTH 32
|
||||||
|
|
||||||
struct tcp_info;
|
struct tcp_info;
|
||||||
|
|
||||||
@ -49,8 +51,8 @@ struct ccid_operations {
|
|||||||
const char *ccid_name;
|
const char *ccid_name;
|
||||||
struct kmem_cache *ccid_hc_rx_slab,
|
struct kmem_cache *ccid_hc_rx_slab,
|
||||||
*ccid_hc_tx_slab;
|
*ccid_hc_tx_slab;
|
||||||
char ccid_hc_rx_slab_name[32];
|
char ccid_hc_rx_slab_name[CCID_SLAB_NAME_LENGTH];
|
||||||
char ccid_hc_tx_slab_name[32];
|
char ccid_hc_tx_slab_name[CCID_SLAB_NAME_LENGTH];
|
||||||
__u32 ccid_hc_rx_obj_size,
|
__u32 ccid_hc_rx_obj_size,
|
||||||
ccid_hc_tx_obj_size;
|
ccid_hc_tx_obj_size;
|
||||||
/* Interface Routines */
|
/* Interface Routines */
|
||||||
|
Loading…
Reference in New Issue
Block a user