diff --git a/asoc/codecs/wsa883x/wsa883x.c b/asoc/codecs/wsa883x/wsa883x.c index af9291204d21..94b3e34715b2 100644 --- a/asoc/codecs/wsa883x/wsa883x.c +++ b/asoc/codecs/wsa883x/wsa883x.c @@ -238,9 +238,9 @@ static ssize_t swr_slave_reg_show(struct swr_device *pdev, char __user *ubuf, if (!is_swr_slave_reg_readable(i)) continue; swr_read(pdev, pdev->dev_num, i, ®_val, 1); - len = snprintf(tmp_buf, 25, "0x%.3x: 0x%.2x\n", i, + len = snprintf(tmp_buf, sizeof(tmp_buf), "0x%.3x: 0x%.2x\n", i, (reg_val & 0xFF)); - if ((total + len) >= count - 1) + if (((total + len) >= count - 1) || (len < 0)) break; if (copy_to_user((ubuf + total), tmp_buf, len)) { pr_err("%s: fail to copy reg dump\n", __func__);