Check the validity of subchanel before reading other fields in
the schib.
Fixes: d3683c055212 ("s390/cio: add dev_busid sysfs entry for each subchannel")
CC: <stable@vger.kernel.org>
Reported-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Link: https://lore.kernel.org/r/20211105154451.847288-1-vneethv@linux.ibm.com
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
 
        struct subchannel *sch = to_subchannel(dev);
        struct pmcw *pmcw = &sch->schib.pmcw;
 
-       if ((pmcw->st == SUBCHANNEL_TYPE_IO ||
-            pmcw->st == SUBCHANNEL_TYPE_MSG) && pmcw->dnv)
+       if ((pmcw->st == SUBCHANNEL_TYPE_IO && pmcw->dnv) ||
+           (pmcw->st == SUBCHANNEL_TYPE_MSG && pmcw->w))
                return sysfs_emit(buf, "0.%x.%04x\n", sch->schid.ssid,
                                  pmcw->dev);
        else