Merge tag 'irq_urgent_for_v6.7_rc2' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / drivers / tty / vcc.c
index a39ed981bfd3e4488bbeea49ada9ac33cb099652..5b625f20233b4782cd5d5ff99b14ec5740009304 100644 (file)
@@ -579,18 +579,22 @@ static int vcc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
                return -ENOMEM;
 
        name = kstrdup(dev_name(&vdev->dev), GFP_KERNEL);
+       if (!name) {
+               rv = -ENOMEM;
+               goto free_port;
+       }
 
        rv = vio_driver_init(&port->vio, vdev, VDEV_CONSOLE_CON, vcc_versions,
                             ARRAY_SIZE(vcc_versions), NULL, name);
        if (rv)
-               goto free_port;
+               goto free_name;
 
        port->vio.debug = vcc_dbg_vio;
        vcc_ldc_cfg.debug = vcc_dbg_ldc;
 
        rv = vio_ldc_alloc(&port->vio, &vcc_ldc_cfg, port);
        if (rv)
-               goto free_port;
+               goto free_name;
 
        spin_lock_init(&port->lock);
 
@@ -624,6 +628,11 @@ static int vcc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
                goto unreg_tty;
        }
        port->domain = kstrdup(domain, GFP_KERNEL);
+       if (!port->domain) {
+               rv = -ENOMEM;
+               goto unreg_tty;
+       }
+
 
        mdesc_release(hp);
 
@@ -653,8 +662,9 @@ free_table:
        vcc_table_remove(port->index);
 free_ldc:
        vio_ldc_free(&port->vio);
-free_port:
+free_name:
        kfree(name);
+free_port:
        kfree(port);
 
        return rv;