Re: [PATCH] ipvs: Add boundary check on ioctl arguments
From: Julian Anastasov <ja@ssi.bg>
Date: 2009-09-30 19:40:52
Also in:
lkml
Hello, On Wed, 30 Sep 2009, Arjan van de Ven wrote:
fair enough; updated patch belowquoted
From 28ae217858e683c0c94c02219d46a9a9c87f61c6 Mon Sep 17 00:00:00 2001From: Arjan van de Ven <redacted> Date: Wed, 30 Sep 2009 13:05:51 +0200 Subject: [PATCH] ipvs: Add boundary check on ioctl arguments The ipvs code has a nifty system for doing the size of ioctl command copies; it defines an array with values into which it indexes the cmd to find the right length. Unfortunately, the ipvs code forgot to check if the cmd was in the range that the array provides, allowing for an index outside of the array, which then gives a "garbage" result into the length, which then gets used for copying into a stack buffer.
do_ip_vs_get_ctl and do_ip_vs_set_ctl are nf_sockopt_ops handlers, so the range is checked by nf_sockopt_find() in Netfilter code. get_arglen[] and set_arglen[] are minimum values for the length and they can be 0. Later len can be checked additionally and surely can exceed 128 (include/linux/ip_vs.h has all user structures). Can you show the exact cmd and len used, may be there is error in some command or may be the provided user structure is wrong? Regards -- Julian Anastasov [off-list ref]