From: Jia-Ju Bai Date: Tue, 10 Apr 2018 08:31:46 +0000 (+0800) Subject: tty: ipwireless: Replace GFP_ATOMIC with GFP_KERNEL in ipwireless_network_create X-Git-Tag: v4.18-rc1~133^2~41 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=13eac05b0581e6f9f5aec93a8ab64c83d7c311bf;p=linux.git tty: ipwireless: Replace GFP_ATOMIC with GFP_KERNEL in ipwireless_network_create ipwireless_network_create() is never called in atomic context. The call chain ending up at ipwireless_network_create() is: [1] ipwireless_network_create() <- config_ipwireless() <- ipwireless_attach() ipwireless_attach() is only set as ".probe" in struct pcmcia_driver. Despite never getting called from atomic context, ipwireless_network_create() calls kzalloc() with GFP_ATOMIC, which does not sleep for allocation. GFP_ATOMIC is not necessary and can be replaced with GFP_KERNEL, which can sleep and improve the possibility of sucessful allocation. This is found by a static analysis tool named DCNS written by myself. And I also manually check it. Signed-off-by: Jia-Ju Bai Reviewed-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/tty/ipwireless/network.c b/drivers/tty/ipwireless/network.c index 695439c03147..cf20616340a1 100644 --- a/drivers/tty/ipwireless/network.c +++ b/drivers/tty/ipwireless/network.c @@ -416,7 +416,7 @@ void ipwireless_network_packet_received(struct ipw_network *network, struct ipw_network *ipwireless_network_create(struct ipw_hardware *hw) { struct ipw_network *network = - kzalloc(sizeof(struct ipw_network), GFP_ATOMIC); + kzalloc(sizeof(struct ipw_network), GFP_KERNEL); if (!network) return NULL;