From: Christoph Hellwig <hch@lst.de>
To: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Christoph Hellwig <hch@lst.de>,
akpm@osdl.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] add compat_ioctl methods to dasd
Date: Wed, 16 Nov 2005 09:45:44 +0100 [thread overview]
Message-ID: <20051116084544.GA25181@lst.de> (raw)
In-Reply-To: <20051115172438.GA10445@lst.de>
On Tue, Nov 15, 2005 at 06:24:38PM +0100, Christoph Hellwig wrote:
> > and doesn't work after fixing the compile problem. It's a
> > problem with the bdev->bd_disk->private_data which is NULL at the time
> > the partition detection code calls the BIODASDINFO and HDIO_GETGEO ioctl
> > with ioctl_by_bdev. I don't see an easy way to fix this right now.
>
> my patch doesn't change anything related to dereferencing those fields.
>
> I see the problem that you're probably having: ioctl_by_bdev calls
> ->ioctl without ensuring ->open has been called previously. But I don't
> see why this couldn't have happened previously.
So looking at it again I found a bug: we return EINVAL on an invalid
ioctl, but the compat layer expects ENOIOCTLCMD so it returns using the
generic compat bits. Returning ENOIOCTLCMD from unlocked_ioctl is fine
aswell as the ioctl layer turns it back. The patch below fix this issue
and the missing semicolon after lock_kernel()
Index: linux-2.6/drivers/s390/block/dasd_ioctl.c
===================================================================
--- linux-2.6.orig/drivers/s390/block/dasd_ioctl.c 2005-11-16 00:59:04.000000000 +0100
+++ linux-2.6/drivers/s390/block/dasd_ioctl.c 2005-11-16 01:02:36.000000000 +0100
@@ -86,11 +86,11 @@
struct dasd_device *device = bdev->bd_disk->private_data;
struct dasd_ioctl *ioctl;
const char *dir;
- int rc = -EINVAL;
+ int rc = -ENOIOCTLCMD;
if ((_IOC_DIR(no) != _IOC_NONE) && (data == 0)) {
PRINT_DEBUG("empty data ptr");
- return -EINVAL;
+ goto out;
}
dir = _IOC_DIR (no) == _IOC_NONE ? "0" :
_IOC_DIR (no) == _IOC_READ ? "r" :
@@ -100,7 +100,7 @@
"ioctl 0x%08x %s'0x%x'%d(%d) with data %8lx", no,
dir, _IOC_TYPE(no), _IOC_NR(no), _IOC_SIZE(no), data);
- lock_kernel()
+ lock_kernel();
/* Search for ioctl no in the ioctl list. */
list_for_each_entry(ioctl, &dasd_ioctl_list, list) {
if (ioctl->no == no) {
@@ -109,15 +109,16 @@
continue;
rc = ioctl->handler(bdev, no, data);
module_put(ioctl->owner);
- goto out;
+ break;
}
}
/* No ioctl with number no. */
DBF_DEV_EVENT(DBF_INFO, device,
"unknown ioctl 0x%08x=%s'0x%x'%d(%d) data %8lx", no,
dir, _IOC_TYPE(no), _IOC_NR(no), _IOC_SIZE(no), data);
- out:
+ out_unlock:
unlock_kernel();
+ out:
return rc;
}
next prev parent reply other threads:[~2005-11-16 8:45 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-04 22:16 [PATCH 1/4] add compat_ioctl methods to dasd Christoph Hellwig
2005-11-12 9:33 ` Christoph Hellwig
2005-11-15 14:51 ` Martin Schwidefsky
2005-11-15 17:24 ` Christoph Hellwig
2005-11-16 8:45 ` Christoph Hellwig [this message]
2005-11-17 12:27 ` Martin Schwidefsky
2005-11-17 22:18 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051116084544.GA25181@lst.de \
--to=hch@lst.de \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=schwidefsky@de.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.