Bug 217649 - cam_open_device requires mode = O_RDWR in order to access pass(4) devices; it's not explicitly called out in manpage
Summary: cam_open_device requires mode = O_RDWR in order to access pass(4) devices; it...
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: CURRENT
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-bugs mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-03-08 23:36 UTC by Enji Cooper
Modified: 2017-03-13 20:59 UTC (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Enji Cooper freebsd_committer 2017-03-08 23:36:55 UTC
Repro:

- Log in as root (or a user with sudo/su privileges or write access to devices)
- Copy this directory to your FreeBSD machine: https://people.freebsd.org/~ngie/bugs/cam_open_device/
- cd to the downloaded path and run "make" (don't call "make obj" first).
- Run "./cam_open_device /some/cam/device/path", e.g. "./cam_open_device /dev/da0".

Expected results:
- If passthrough support is enabled, it should open the device, but not do anything with it.

Actual results:

I get the following error message from the program when running it against my fake mpt(4) controller in my VMware fusion instance:

# ls -l /dev/pass*
crw-------  1 root  operator  0x36 Mar  6 20:03 /dev/pass0
crw-------  1 root  operator  0x37 Mar  6 20:03 /dev/pass1
# ./cam_open_device da0
cam_open_device: cam_open_device failed: Operation not permitted
cam_open_device: cam_errbuf is: cam_real_open_device: couldn't open passthrough device /dev/pass0
cam_real_open_device: Operation not permitted
#
Comment 1 Enji Cooper freebsd_committer 2017-03-08 23:38:20 UTC
(In reply to Ngie Cooper from comment #0)

Sidenote: there's only one consumer of this lib call in the tree: mptutil(8). I'm wondering if it's been broken over time..
Comment 2 Mark Johnston freebsd_committer 2017-03-08 23:54:55 UTC
Passthrough devices need to be opened with O_RDWR. This has pretty much always been the case: https://svnweb.freebsd.org/base?view=revision&revision=39317
Comment 3 Enji Cooper freebsd_committer 2017-03-09 00:11:23 UTC
(In reply to Mark Johnston from comment #2)

Confirmed (after changing mode to O_RDWR):

# ./cam_open_device /dev/da0
cam_open_device succeeded!

Hm... it seems either the requirement should be more explicit in either the manpage or the library.