Re: [PATCH 1/1] x86:mm:return -ENOMEM if kzalloc() fails

From: Joe Perches
Date: Thu Sep 07 2017 - 02:34:01 EST


On Thu, 2017-09-07 at 11:56 +0530, Allen Pais wrote:
> Currently on failure the value returned from kzalloc() is -1.
> It should return -ENOMEM.
>

Looks like there are quite a few of these:
(probably several false positives too)

$ git grep -A3 alloc.*GFP|grep -B3 -P "return\s+\-\d+"
arch/powerpc/platforms/cell/spider-pci.c: dummy_page_va = kmalloc(PAGE_SIZE, GFP_KERNEL);
arch/powerpc/platforms/cell/spider-pci.c- if (!dummy_page_va) {
arch/powerpc/platforms/cell/spider-pci.c- pr_err("SPIDERPCI-IOWA:Alloc dummy_page_va failed.\n");
arch/powerpc/platforms/cell/spider-pci.c- return -1;
--
--
arch/x86/mm/kmmio.c: f = kzalloc(sizeof(*f), GFP_ATOMIC);
arch/x86/mm/kmmio.c- if (!f)
arch/x86/mm/kmmio.c- return -1;
--
drivers/bluetooth/bluecard_cs.c: skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
drivers/bluetooth/bluecard_cs.c- if (!skb) {
drivers/bluetooth/bluecard_cs.c- BT_ERR("Can't allocate mem for new packet");
drivers/bluetooth/bluecard_cs.c- return -1;
--
drivers/crypto/omap-aes-gcm.c: sk_req = skcipher_request_alloc(ctx->ctr, GFP_KERNEL);
drivers/crypto/omap-aes-gcm.c- if (!sk_req) {
drivers/crypto/omap-aes-gcm.c- pr_err("skcipher: Failed to allocate request\n");
drivers/crypto/omap-aes-gcm.c- return -1;
--
--
drivers/gpu/drm/gma500/mid_bios.c: gct = kmalloc(sizeof(*gct) * vbt.panel_count, GFP_KERNEL);
drivers/gpu/drm/gma500/mid_bios.c- if (!gct)
drivers/gpu/drm/gma500/mid_bios.c- return -1;
--
drivers/hid/usbhid/hiddev.c- if ((len = usb_string(dev, idx, buf, HID_STRING_SIZE-1)) < 0) {
--
drivers/hid/usbhid/hiddev.c: if (!(hiddev = kzalloc(sizeof(struct hiddev), GFP_KERNEL)))
drivers/hid/usbhid/hiddev.c- return -1;
--
drivers/hid/usbhid/hiddev.c- init_waitqueue_head(&hiddev->wait);
--
drivers/hid/usbhid/usbkbd.c: if (!(kbd->irq = usb_alloc_urb(0, GFP_KERNEL)))
drivers/hid/usbhid/usbkbd.c- return -1;
drivers/hid/usbhid/usbkbd.c: if (!(kbd->led = usb_alloc_urb(0, GFP_KERNEL)))
drivers/hid/usbhid/usbkbd.c- return -1;
drivers/hid/usbhid/usbkbd.c: if (!(kbd->new = usb_alloc_coherent(dev, 8, GFP_ATOMIC, &kbd->new_dma)))
drivers/hid/usbhid/usbkbd.c- return -1;
drivers/hid/usbhid/usbkbd.c: if (!(kbd->cr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL)))
drivers/hid/usbhid/usbkbd.c- return -1;
drivers/hid/usbhid/usbkbd.c: if (!(kbd->leds = usb_alloc_coherent(dev, 1, GFP_ATOMIC, &kbd->leds_dma)))
drivers/hid/usbhid/usbkbd.c- return -1;
--
drivers/isdn/capi/capi.c: n = kmalloc(sizeof(*n), GFP_ATOMIC);
drivers/isdn/capi/capi.c- if (unlikely(!n)) {
drivers/isdn/capi/capi.c- printk(KERN_ERR "capi: alloc datahandle failed\n");
drivers/isdn/capi/capi.c- return -1;
--
drivers/isdn/capi/capidrv.c: n = kmalloc(sizeof(struct ncci_datahandle_queue), GFP_ATOMIC);
drivers/isdn/capi/capidrv.c- if (!n) {
drivers/isdn/capi/capidrv.c- printk(KERN_ERR "capidrv: kmalloc ncci_datahandle failed\n");
drivers/isdn/capi/capidrv.c- return -1;
--
drivers/isdn/capi/capidrv.c: if (!(card = kzalloc(sizeof(capidrv_contr), GFP_ATOMIC))) {
drivers/isdn/capi/capidrv.c- printk(KERN_WARNING
drivers/isdn/capi/capidrv.c- "capidrv: (%s) Could not allocate contr-struct.\n", id);
drivers/isdn/capi/capidrv.c- return -1;
--
--
drivers/isdn/i4l/isdn_common.c: if (!(d->rcverr = kzalloc(sizeof(int) * m, GFP_ATOMIC))) {
drivers/isdn/i4l/isdn_common.c- printk(KERN_WARNING "register_isdn: Could not alloc rcverr\n");
drivers/isdn/i4l/isdn_common.c- return -1;
--
--
drivers/media/pci/ivtv/ivtv-udma.c: dma->bouncemap[map_offset] = alloc_page(GFP_KERNEL);
drivers/media/pci/ivtv/ivtv-udma.c- if (dma->bouncemap[map_offset] == NULL)
drivers/media/pci/ivtv/ivtv-udma.c- return -1;
--
drivers/media/rc/ati_remote.c: ati_remote->inbuf = usb_alloc_coherent(udev, DATA_BUFSIZE, GFP_ATOMIC,
drivers/media/rc/ati_remote.c- &ati_remote->inbuf_dma);
drivers/media/rc/ati_remote.c- if (!ati_remote->inbuf)
drivers/media/rc/ati_remote.c- return -1;
--
drivers/media/rc/ati_remote.c: ati_remote->outbuf = usb_alloc_coherent(udev, DATA_BUFSIZE, GFP_ATOMIC,
drivers/media/rc/ati_remote.c- &ati_remote->outbuf_dma);
drivers/media/rc/ati_remote.c- if (!ati_remote->outbuf)
drivers/media/rc/ati_remote.c- return -1;
--
drivers/media/rc/ati_remote.c: ati_remote->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
drivers/media/rc/ati_remote.c- if (!ati_remote->irq_urb)
drivers/media/rc/ati_remote.c- return -1;
drivers/media/rc/ati_remote.c-
drivers/media/rc/ati_remote.c: ati_remote->out_urb = usb_alloc_urb(0, GFP_KERNEL);
drivers/media/rc/ati_remote.c- if (!ati_remote->out_urb)
drivers/media/rc/ati_remote.c- return -1;
--
--
drivers/message/fusion/mptbase.c: mem = kmalloc(sz, GFP_ATOMIC);
drivers/message/fusion/mptbase.c- if (mem == NULL)
drivers/message/fusion/mptbase.c- return -1;
--
--
drivers/message/fusion/mptbase.c: mem = kmalloc(sz, GFP_ATOMIC);
drivers/message/fusion/mptbase.c- if (mem == NULL)
drivers/message/fusion/mptbase.c- return -1;
--
--
drivers/message/fusion/mptbase.c: mem = kmalloc(sz, GFP_ATOMIC);
drivers/message/fusion/mptbase.c- if (mem == NULL)
drivers/message/fusion/mptbase.c- return -1;
--
drivers/mtd/nand/nandsim.c: mypage->byte = kmem_cache_alloc(ns->nand_pages_slab, GFP_NOFS);
drivers/mtd/nand/nandsim.c- if (mypage->byte == NULL) {
drivers/mtd/nand/nandsim.c- NS_ERR("prog_page: error allocating memory for page %d\n", ns->regs.row);
drivers/mtd/nand/nandsim.c- return -1;
--
--
drivers/net/bonding/bond_alb.c: new_hashtbl = kmalloc(size, GFP_KERNEL);
drivers/net/bonding/bond_alb.c- if (!new_hashtbl)
drivers/net/bonding/bond_alb.c- return -1;
--
drivers/net/ethernet/ibm/ibmveth.c: pool->free_map = kmalloc(sizeof(u16) * pool->size, GFP_KERNEL);
drivers/net/ethernet/ibm/ibmveth.c-
drivers/net/ethernet/ibm/ibmveth.c- if (!pool->free_map)
drivers/net/ethernet/ibm/ibmveth.c- return -1;
--
--
drivers/net/ethernet/ibm/ibmvnic.c: allqueues = kcalloc(total_queues, sizeof(*allqueues), GFP_KERNEL);
drivers/net/ethernet/ibm/ibmvnic.c- if (!allqueues)
drivers/net/ethernet/ibm/ibmvnic.c- return -1;
--
drivers/net/ethernet/sun/cassini.c- if (page) {
--
drivers/net/ethernet/sun/cassini.c: if ((page[i] = cas_page_alloc(cp, GFP_KERNEL)) == NULL)
drivers/net/ethernet/sun/cassini.c- return -1;
--
--
drivers/net/wireless/marvell/mwifiex/sdio.c: skb = mwifiex_alloc_dma_align_buf(rx_len, GFP_KERNEL);
drivers/net/wireless/marvell/mwifiex/sdio.c- if (!skb)
drivers/net/wireless/marvell/mwifiex/sdio.c- return -1;
--
--
drivers/net/wireless/marvell/mwifiex/usb.c: card->rx_data_list[i].urb = usb_alloc_urb(0, GFP_KERNEL);
drivers/net/wireless/marvell/mwifiex/usb.c- if (!card->rx_data_list[i].urb)
drivers/net/wireless/marvell/mwifiex/usb.c- return -1;
--
drivers/parisc/eisa_enumerator.c- res->end = get_16(buf+len+1)+(c&HPEE_PORT_SIZE_MASK)+1;
--
drivers/parisc/eisa_enumerator.c: if (NULL == (board = kmalloc(8, GFP_KERNEL))) {
drivers/parisc/eisa_enumerator.c- return -1;
--
--
drivers/pnp/pnpbios/core.c: node = kzalloc(node_info.max_node_size, GFP_KERNEL);
drivers/pnp/pnpbios/core.c- if (!node)
drivers/pnp/pnpbios/core.c- return -1;
--
--
drivers/pnp/pnpbios/core.c: node = kzalloc(node_info.max_node_size, GFP_KERNEL);
drivers/pnp/pnpbios/core.c- if (!node)
drivers/pnp/pnpbios/core.c- return -1;
--
drivers/scsi/megaraid/megaraid_mbox.c- con_log(CL_ANN, (KERN_WARNING
--
drivers/scsi/megaraid/megaraid_mbox.c: raid_dev = kzalloc(sizeof(mraid_device_t), GFP_KERNEL);
drivers/scsi/megaraid/megaraid_mbox.c- if (raid_dev == NULL) return -1;
--
--
drivers/staging/rtlwifi/halmac/rtl_halmac.c: comp = kzalloc(sizeof(*comp), GFP_KERNEL);
drivers/staging/rtlwifi/halmac/rtl_halmac.c- if (!comp)
drivers/staging/rtlwifi/halmac/rtl_halmac.c- return -1;
--
--
drivers/staging/rtlwifi/halmac/rtl_halmac.c: indicator = kzalloc(size, GFP_KERNEL);
drivers/staging/rtlwifi/halmac/rtl_halmac.c- if (!indicator)
drivers/staging/rtlwifi/halmac/rtl_halmac.c- return -1;
--
--
drivers/target/iscsi/cxgbit/cxgbit_cm.c: skb = alloc_skb(len, GFP_KERNEL);
drivers/target/iscsi/cxgbit/cxgbit_cm.c- if (!skb)
drivers/target/iscsi/cxgbit/cxgbit_cm.c- return -1;
--
--
drivers/target/iscsi/cxgbit/cxgbit_target.c: page = alloc_page(GFP_KERNEL | __GFP_ZERO);
drivers/target/iscsi/cxgbit/cxgbit_target.c- if (!page)
drivers/target/iscsi/cxgbit/cxgbit_target.c- return -1;
--
--
drivers/target/iscsi/iscsi_target.c: iscsit_global = kzalloc(sizeof(*iscsit_global), GFP_KERNEL);
drivers/target/iscsi/iscsi_target.c- if (!iscsit_global)
drivers/target/iscsi/iscsi_target.c- return -1;
--
drivers/target/iscsi/iscsi_target_nego.c: tmpbuf = kzalloc(payload_length + 1, GFP_KERNEL);
drivers/target/iscsi/iscsi_target_nego.c- if (!tmpbuf) {
drivers/target/iscsi/iscsi_target_nego.c- pr_err("Unable to allocate memory for tmpbuf.\n");
drivers/target/iscsi/iscsi_target_nego.c- return -1;
--
drivers/target/iscsi/iscsi_target_util.c: r2t = kmem_cache_zalloc(lio_r2t_cache, GFP_ATOMIC);
drivers/target/iscsi/iscsi_target_util.c- if (!r2t) {
drivers/target/iscsi/iscsi_target_util.c- pr_err("Unable to allocate memory for struct iscsi_r2t.\n");
drivers/target/iscsi/iscsi_target_util.c- return -1;
--
--
drivers/usb/gadget/udc/fsl_udc_core.c: udc->eps = kzalloc(sizeof(struct fsl_ep) * udc->max_ep, GFP_KERNEL);
drivers/usb/gadget/udc/fsl_udc_core.c- if (!udc->eps)
drivers/usb/gadget/udc/fsl_udc_core.c- return -1;
--
--
drivers/usb/host/ehci-q.c: qtd = ehci_qtd_alloc(ehci, GFP_KERNEL);
drivers/usb/host/ehci-q.c- if (unlikely(!qtd))
drivers/usb/host/ehci-q.c- return -1;
--
--
drivers/usb/serial/io_edgeport.c: pStringDesc = kmalloc(StringDesc.bLength, GFP_KERNEL);
drivers/usb/serial/io_edgeport.c- if (!pStringDesc)
drivers/usb/serial/io_edgeport.c- return -1;
--
drivers/usb/storage/sddr55.c: buffer = kmalloc( numblocks * 2, GFP_NOIO );
drivers/usb/storage/sddr55.c-
drivers/usb/storage/sddr55.c- if (!buffer)
drivers/usb/storage/sddr55.c- return -1;
--
--
drivers/video/fbdev/matrox/matroxfb_base.c: minfo = kzalloc(sizeof(*minfo), GFP_KERNEL);
drivers/video/fbdev/matrox/matroxfb_base.c- if (!minfo)
drivers/video/fbdev/matrox/matroxfb_base.c- return -1;
--
--
fs/btrfs/check-integrity.c: block_ctx->pagev[i] = alloc_page(GFP_NOFS);
fs/btrfs/check-integrity.c- if (!block_ctx->pagev[i])
fs/btrfs/check-integrity.c- return -1;
--
fs/btrfs/check-integrity.c: state = kvzalloc(sizeof(*state), GFP_KERNEL);
fs/btrfs/check-integrity.c- if (!state) {
fs/btrfs/check-integrity.c- pr_info("btrfs check-integrity: allocation failed!\n");
fs/btrfs/check-integrity.c- return -1;
--
--
lib/string.c: p = kmalloc(256 * 2 * 2, GFP_KERNEL);
lib/string.c- if (!p)
lib/string.c- return -1;
--
--
lib/string.c: p = kmalloc(256 * 2 * 4, GFP_KERNEL);
lib/string.c- if (!p)
lib/string.c- return -1;
--
--
lib/string.c: p = kmalloc(256 * 2 * 8, GFP_KERNEL);
lib/string.c- if (!p)
lib/string.c- return -1;
--
--
net/atm/lec.c: skb = alloc_skb(sizeof(struct atmlec_msg), GFP_ATOMIC);
net/atm/lec.c- if (!skb)
net/atm/lec.c- return -1;
--
--
net/atm/lec.c: skb = alloc_skb(*sizeoftlvs, GFP_ATOMIC);
net/atm/lec.c- if (skb == NULL)
net/atm/lec.c- return -1;
--
net/ipv4/igmp.c: skb = alloc_skb(IGMP_SIZE + hlen + tlen, GFP_ATOMIC);
net/ipv4/igmp.c- if (!skb) {
net/ipv4/igmp.c- ip_rt_put(rt);
net/ipv4/igmp.c- return -1;
--
--
net/ipv4/tcp_output.c: nskb = sk_stream_alloc_skb(sk, probe_size, GFP_ATOMIC, false);
net/ipv4/tcp_output.c- if (!nskb)
net/ipv4/tcp_output.c- return -1;
--
net/netrom/af_netrom.c: dev_nr = kzalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
net/netrom/af_netrom.c- if (dev_nr == NULL) {
net/netrom/af_netrom.c- printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device array\n");
net/netrom/af_netrom.c- return -1;
--
--
net/sunrpc/auth_gss/svcauth_gss.c: xdr_seq = kmalloc(4, GFP_KERNEL);
net/sunrpc/auth_gss/svcauth_gss.c- if (!xdr_seq)
net/sunrpc/auth_gss/svcauth_gss.c- return -1;
--
sound/oss/ad1848.c: portc = kmalloc(sizeof(ad1848_port_info), GFP_KERNEL);
sound/oss/ad1848.c- if(portc==NULL) {
sound/oss/ad1848.c- release_region(devc->base, 4);
sound/oss/ad1848.c- return -1;
--
sound/oss/swarm_cs4297a.c: dma->descrtab = kzalloc(dma->ringsz * sizeof(serdma_descr_t), GFP_KERNEL);
sound/oss/swarm_cs4297a.c- if (!dma->descrtab) {
sound/oss/swarm_cs4297a.c- printk(KERN_ERR "cs4297a: kzalloc descrtab failed\n");
sound/oss/swarm_cs4297a.c- return -1;
--
sound/oss/swarm_cs4297a.c: if (!(s = kzalloc(sizeof(struct cs4297a_state), GFP_KERNEL))) {
sound/oss/swarm_cs4297a.c- CS_DBGOUT(CS_ERROR, 1, printk(KERN_ERR
sound/oss/swarm_cs4297a.c- "cs4297a: probe() no memory for state struct.\n"));
sound/oss/swarm_cs4297a.c- return -1;
>