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);
 
                goto unreg_tty;
        }
        port->domain = kstrdup(domain, GFP_KERNEL);
+       if (!port->domain) {
+               rv = -ENOMEM;
+               goto unreg_tty;
+       }
+
 
        mdesc_release(hp);
 
        vcc_table_remove(port->index);
 free_ldc:
        vio_ldc_free(&port->vio);
-free_port:
+free_name:
        kfree(name);
+free_port:
        kfree(port);
 
        return rv;