hrev54690 adds 1 changeset to branch 'master'
old head: 072d3935c2497638e9c2502f574c133caeba9d3d
new head: 071d7d3e3fe601fec2997bca363faad62414c1c7
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=071d7d3e3fe6+%5E072d3935c249
----------------------------------------------------------------------------
071d7d3e3fe6: network/stack: assume zero length ioctl requests are valid
posix ioctl calls don't provide a request length. Theorically these length
checks
could be removed altogether.
Change-Id: Ie53f10dc8d050dd3bdf2e5a792ed79f139a24d29
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3364
Reviewed-by: Jérôme Duval <jerome.duval@xxxxxxxxx>
[ Jérôme Duval <jerome.duval@xxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev54690
Commit: 071d7d3e3fe601fec2997bca363faad62414c1c7
URL: https://git.haiku-os.org/haiku/commit/?id=071d7d3e3fe6
Author: Jérôme Duval <jerome.duval@xxxxxxxxx>
Date: Thu Oct 29 11:47:46 2020 UTC
----------------------------------------------------------------------------
2 files changed, 10 insertions(+), 9 deletions(-)
src/add-ons/kernel/network/stack/datalink.cpp | 17 +++++++++--------
src/add-ons/kernel/network/stack/link.cpp | 2 +-
----------------------------------------------------------------------------
diff --git a/src/add-ons/kernel/network/stack/datalink.cpp
b/src/add-ons/kernel/network/stack/datalink.cpp
index 74ed66b354..8fa8c6c620 100644
--- a/src/add-ons/kernel/network/stack/datalink.cpp
+++ b/src/add-ons/kernel/network/stack/datalink.cpp
@@ -134,7 +134,7 @@ get_interface_name_or_index(net_domain* domain, int32
option, void* value,
ASSERT(option == SIOCGIFINDEX || option == SIOCGIFNAME);
size_t expected = option == SIOCGIFINDEX ? IF_NAMESIZE : sizeof(ifreq);
- if (*_length < expected)
+ if (*_length > 0 && *_length < expected)
return B_BAD_VALUE;
ifreq request;
@@ -215,7 +215,7 @@ datalink_control(net_domain* _domain, int32 option, void*
value,
case SIOCAIFADDR: /* same as B_SOCKET_ADD_ALIAS */
{
// add new interface address
- if (*_length < sizeof(struct ifaliasreq))
+ if (*_length > 0 && *_length < sizeof(struct
ifaliasreq))
return B_BAD_VALUE;
struct ifaliasreq request;
@@ -320,10 +320,9 @@ datalink_control(net_domain* _domain, int32 option, void*
value,
default:
{
// We also accept partial ifreqs as long as the name is
complete.
- if (*_length < IF_NAMESIZE)
- return B_BAD_VALUE;
-
- size_t length = min_c(sizeof(struct ifreq), *_length);
+ size_t length = sizeof(struct ifreq);
+ if (*_length > 0 && *_length >= IF_NAMESIZE)
+ length = min_c(length, *_length);
// try to pass the request to an existing interface
struct ifreq request;
@@ -754,7 +753,9 @@ interface_protocol_control(net_datalink_protocol*
_protocol, int32 option,
case SIOCGIFBRDADDR:
case SIOCGIFDSTADDR:
{
- if (length < sizeof(ifreq))
+ if (length == 0)
+ length = sizeof(ifreq);
+ else if (length < sizeof(ifreq))
return B_BAD_VALUE;
ifreq request;
@@ -920,7 +921,7 @@ interface_protocol_control(net_datalink_protocol*
_protocol, int32 option,
case SIOCGIFMEDIA:
{
// get media
- if (length < sizeof(ifmediareq))
+ if (length > 0 && length < sizeof(ifmediareq))
return B_BAD_VALUE;
struct ifmediareq request;
diff --git a/src/add-ons/kernel/network/stack/link.cpp
b/src/add-ons/kernel/network/stack/link.cpp
index c88f19b497..12f20ade7e 100644
--- a/src/add-ons/kernel/network/stack/link.cpp
+++ b/src/add-ons/kernel/network/stack/link.cpp
@@ -455,7 +455,7 @@ link_control(net_protocol* _protocol, int level, int
option, void* value,
case SIOCGIFMEDIA:
{
// get media
- if (*_length < sizeof(ifmediareq))
+ if (*_length > 0 && *_length < sizeof(ifmediareq))
return B_BAD_VALUE;
net_device_interface* interface;