Skip to content

fcntl_ioctl still not 100% sane with unsigned longs #60328

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
ngie-eign mannequin opened this issue Oct 4, 2012 · 12 comments
Closed

fcntl_ioctl still not 100% sane with unsigned longs #60328

ngie-eign mannequin opened this issue Oct 4, 2012 · 12 comments
Labels
extension-modules C modules in the Modules dir type-bug An unexpected behavior, bug, or error

Comments

@ngie-eign
Copy link
Mannequin

ngie-eign mannequin commented Oct 4, 2012

BPO 16124
Nosy @loewis, @gpshead, @tpn, @ngie-eign, @asvetlov, @serhiy-storchaka
Files
  • python-issue16124.patch
  • python-issue16124.patch
  • python-issue16124.patch
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2012-10-04.03:46:54.896>
    labels = ['extension-modules', 'type-bug']
    title = 'fcntl_ioctl still not 100% sane with unsigned longs'
    updated_at = <Date 2015-02-15.10:00:39.805>
    user = 'https://github.com/ngie-eign'

    bugs.python.org fields:

    activity = <Date 2015-02-15.10:00:39.805>
    actor = 'ngie'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Extension Modules']
    creation = <Date 2012-10-04.03:46:54.896>
    creator = 'ngie'
    dependencies = []
    files = ['27952', '27954', '27955']
    hgrepos = []
    issue_num = 16124
    keywords = ['patch']
    message_count = 11.0
    messages = ['171918', '172112', '175348', '175354', '175355', '175356', '175357', '175358', '236030', '236031', '236032']
    nosy_count = 6.0
    nosy_names = ['loewis', 'gregory.p.smith', 'trent', 'ngie', 'asvetlov', 'serhiy.storchaka']
    pr_nums = []
    priority = 'normal'
    resolution = None
    stage = 'test needed'
    status = 'open'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue16124'
    versions = ['Python 2.7', 'Python 3.4', 'Python 3.5']

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Oct 4, 2012

    As discussed in ID bpo-1471, the type for request is not 100% correct on some platforms (FreeBSD, NetBSD, and OpenBSD, for instance) and the custom platform that I'm using unfortunately uses non-32-bit int ioctls. An autoconf test needs to be added for these platforms and the request parameter needs to be handled properly (I'll take charge of doing that).

    @ngie-eign ngie-eign mannequin added extension-modules C modules in the Modules dir type-bug An unexpected behavior, bug, or error labels Oct 4, 2012
    @asvetlov
    Copy link
    Contributor

    asvetlov commented Oct 5, 2012

    Is it affected for 3.3 and 3.4 also?

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Nov 11, 2012

    Yes. Submitting a patch to fix this based on hg master shortly..

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Nov 11, 2012

    $ uname -a
    FreeBSD bayonetta.local 9.1-PRERELEASE FreeBSD 9.1-PRERELEASE #0 r240836M: Sat Sep 22 12:30:11 PDT 2012     gcooper@bayonetta.local:/usr/obj/store/freebsd/stable/9/sys/BAYONETTA  amd64
    $ ./configure --prefix=/scratch/python-bin/3k/
    ...
    $ make all; make install
    ...
    $ /scratch/python-bin/3k/bin/python3 Lib/test/test_ioctl.py
    test_ioctl (__main__.IoctlTests) ... ok
    test_ioctl_mutate (__main__.IoctlTests) ... ok
    test_ioctl_mutate_1024 (__main__.IoctlTests) ... ok
    test_ioctl_mutate_2048 (__main__.IoctlTests) ... ok
    test_ioctl_signed_unsigned_code_param (__main__.IoctlTests) ... ok

    Ran 5 tests in 0.003s

    OK

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Nov 11, 2012

    Sorry; previous patch is not applicable to this issue. This one is.

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Nov 11, 2012

    And I missed the int -> unsigned int part. Resubmitting one last time for tonight..

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Nov 11, 2012

    Grr... Let's try again.

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Nov 11, 2012

    ... g'night.

    @serhiy-storchaka
    Copy link
    Member

    This looks as a duplicate of bpo-521723 and bpo-1471. Do you have tests that demonstrate a failure with using ioctl on OpenBSD? May be there are problems on 64-bit big-endian platforms (or even on 64-bit little-endian if additional parameters are passed to ioctl).

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Feb 15, 2015

    Yes, it's a duplicate. That being said, documentation alone it should be unsigned long for Darwin (OS/X), FreeBSD, OpenBSD. Looking at the definition for ioctl(2), the below example would cause a failure.

    I need to hunt around for a practical example as I don't have one offhand (it's something that was found a long time ago in a couple of python 2.6 at my current employer because they have ioctl's that go beyond the 32-bit boundary IIRC...)

    fuji:~ ngie$ clang -Wall -c test_ioctl.c
    fuji:~ ngie$ clang -DBROKEN -Wall -c test_ioctl.c
    test_ioctl.c:9:9: warning: incompatible pointer types initializing 'ioctl_t'
          (aka 'int (*)(int, int, ...)') with an expression of type 'int (int,
          unsigned long, ...)' [-Wincompatible-pointer-types]
    ioctl_t _ioctl = ioctl;
            ^        ~~~~~
    1 warning generated.
    fuji:~ ngie$ cat test_ioctl.c 
    #include <sys/ioctl.h>
    
    #ifdef BROKEN
    typedef int (*ioctl_t)(int, int, ...);
    #else
    typedef int (*ioctl_t)(int, unsigned long, ...);
    #endif

    ioctl_t _ioctl = ioctl;
    fuji:~ ngie$ uname -a
    Darwin fuji.local 13.4.0 Darwin Kernel Version 13.4.0: Wed Dec 17 19:05:52 PST 2014; root:xnu-2422.115.10~1/RELEASE_X86_64 x86_64

    @ngie-eign
    Copy link
    Mannequin Author

    ngie-eign mannequin commented Feb 15, 2015

    Another note: mixed endianness might have been a factor as previous versions of the product that were shipped used bi-arch x86 (32-bit userland on 64-bit kernel.

    @serhiy-storchaka
    Copy link
    Member

    This was fixed in #69214. The documentation will be updated in #132742.

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    extension-modules C modules in the Modules dir type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants