Commit 2f6fd232 authored by Jeff LaBundy's avatar Jeff LaBundy Committed by Dmitry Torokhov

Input: iqs7222 - protect against undefined slider size

Select variants of silicon do not define a default slider size, in
which case the size must be specified in the device tree. If it is
not, the axis's maximum value is reported as 65535 due to unsigned
integer overflow.

To solve this problem, move the existing zero-check outside of the
conditional block that checks whether the property is present.

Fixes: e505edae ("Input: add support for Azoteq IQS7222A/B/C")
Signed-off-by: default avatarJeff LaBundy <jeff@labundy.com>
Link: https://lore.kernel.org/r/Y1SRXEi7XMlncDWk@nixie71Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 99d03b54
......@@ -2024,7 +2024,7 @@ static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222,
error = fwnode_property_read_u32(sldr_node, "azoteq,slider-size", &val);
if (!error) {
if (!val || val > dev_desc->sldr_res) {
if (val > dev_desc->sldr_res) {
dev_err(&client->dev, "Invalid %s size: %u\n",
fwnode_get_name(sldr_node), val);
return -EINVAL;
......@@ -2043,6 +2043,13 @@ static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222,
return error;
}
if (!(reg_offset ? sldr_setup[3]
: sldr_setup[2] & IQS7222_SLDR_SETUP_2_RES_MASK)) {
dev_err(&client->dev, "Undefined %s size\n",
fwnode_get_name(sldr_node));
return -EINVAL;
}
error = fwnode_property_read_u32(sldr_node, "azoteq,top-speed", &val);
if (!error) {
if (val > (reg_offset ? U16_MAX : U8_MAX * 4)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment