static inline char *make_irq_label(const char *orig)
 {
-       return kstrdup_and_replace(orig, '/', ':', GFP_KERNEL);
+       char *new;
+
+       if (!orig)
+               return NULL;
+
+       new = kstrdup_and_replace(orig, '/', ':', GFP_KERNEL);
+       if (!new)
+               return ERR_PTR(-ENOMEM);
+
+       return new;
 }
 
 static inline void free_irq_label(const char *label)
        irqflags |= IRQF_ONESHOT;
 
        label = make_irq_label(line->req->label);
-       if (!label)
-               return -ENOMEM;
+       if (IS_ERR(label))
+               return PTR_ERR(label);
 
        /* Request a thread to read the events */
        ret = request_threaded_irq(irq, edge_irq_handler, edge_irq_thread,
                goto out_free_le;
 
        label = make_irq_label(le->label);
-       if (!label) {
-               ret = -ENOMEM;
+       if (IS_ERR(label)) {
+               ret = PTR_ERR(label);
                goto out_free_le;
        }