Page MenuHomeFreeBSD

Fix ISP_FC_LIP and ISP_RESCAN on big-endian 64-bit systems.
ClosedPublic

Authored by brooks on Mar 12 2018, 9:25 PM.
Tags
None
Referenced Files
F135068032: D14673.diff
Thu, Nov 6, 5:37 AM
F135068004: D14673.diff
Thu, Nov 6, 5:37 AM
Unknown Object (File)
Tue, Oct 28, 8:47 AM
Unknown Object (File)
Fri, Oct 24, 7:28 PM
Unknown Object (File)
Tue, Oct 21, 8:54 AM
Unknown Object (File)
Mon, Oct 20, 10:48 AM
Unknown Object (File)
Mon, Oct 20, 10:48 AM
Unknown Object (File)
Mon, Oct 20, 1:01 AM
Subscribers

Details

Summary

For _IO() ioctls, addr is a pointer to uap->data which is a caddr_t.
When the caddr_t stores an int, dereferencing addr as an (int *) results
in truncation on little-endian 64-bit systems and corruption (owing to
extracting top bits) on big-endian 64-bit systems. In practice the
value of chan was probably always zero on systems of the latter type.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

It makes some sense to me, but I suspect that this code is generally dead, since I don't know any user-space tool using it. Ken, do you?

This revision is now accepted and ready to land.Mar 12 2018, 9:46 PM
brooks retitled this revision from Fix ISP_FC_LIP and ISP_RESCAN on big-endian 64-bit systemss to Fix ISP_FC_LIP and ISP_RESCAN on big-endian 64-bit systems..Mar 12 2018, 11:05 PM
This revision was automatically updated to reflect the committed changes.