From patchwork Mon May 5 21:20:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Praveen Balakrishnan X-Patchwork-Id: 887684 Received: from fallback4.mail.ox.ac.uk (fallback4.mail.ox.ac.uk [129.67.1.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B714A13AF2; Mon, 5 May 2025 22:03:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=129.67.1.171 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746482600; cv=fail; b=eA1x2A5Z/x+uGLtpFNgb9Z5CHd0kze3MkTiVI/oNAVk4MTnhxYGxhOoIg8koAYoKm486WestCNNgl963Fe6sNo7zEgrYI13OEPEWlWNhj92KtyK5OAoHfxV+7rWPK1if94BwajJfOuKWfmQ9+AbKeliXHI85pKBcyroEJqRIeow= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746482600; c=relaxed/simple; bh=h2UEkGCdR+GKj2NkfNkMAPrFLFPXTu1fTbCzJ4hRPVQ=; h=Message-ID:Date:From:Subject:To:CC:Content-Type:MIME-Version; b=X9IhK2lAUAE7c+9Zn/kGEfNcrlR8RDp+WsdOwWRsmw7vzjnIpvRvUFZ3ZYWdX2t6SsW6wB+5NmliPpzjKfrwzsaSaaDmhlrT6TEzVt1HlYP87T27qKYqbbV+qd3HLOTPLSVjluyN0z1wOjx3SbQ9Jt/jwpLSzvqlS0cU3mJoBFs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=magd.ox.ac.uk; spf=pass smtp.mailfrom=magd.ox.ac.uk; dkim=pass (2048-bit key) header.d=ox.ac.uk header.i=@ox.ac.uk header.b=KBpti5uC; dkim=pass (2048-bit key) header.d=UniOxfordNexus.onmicrosoft.com header.i=@UniOxfordNexus.onmicrosoft.com header.b=OLGCpHpX; arc=fail smtp.client-ip=129.67.1.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=magd.ox.ac.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=magd.ox.ac.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ox.ac.uk header.i=@ox.ac.uk header.b="KBpti5uC"; dkim=pass (2048-bit key) header.d=UniOxfordNexus.onmicrosoft.com header.i=@UniOxfordNexus.onmicrosoft.com header.b="OLGCpHpX" Received: from relay19.mail.ox.ac.uk ([129.67.1.170]) by fallback4.mail.ox.ac.uk with esmtp (Exim 4.92) (envelope-from ) id 1uC3FF-0000YA-Hz; Mon, 05 May 2025 22:21:01 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ox.ac.uk; s=flood; h=MIME-Version:Content-Type:CC:To:Subject:From:Date:Message-ID: reply-to; bh=3OS0J5uQ2A7qkodxTeS1E3sPp4nlwxnVLDOeAWsC0mQ=; t=1746480061; x=1747344061; b=KBpti5uCoeX6B/aboyRmcSDl5jwiVXmF5aXobAorJZYmXmWzXKaT6apaBDTFW kVF53bWFwQvIROsVq4EQkH52gAd53x9gkXpZMYs4WLe9zxNVQ1aVWaxyVMKHl+3XV5cEDE6uImVDg YqY4/KCcgF1u/JqMSzN0Awm3TJqGrimBkcLdzpfpgLojPGR/hi1ojzTu9+hpMNBshnfiyfEWRClJD ggKyRGx5ilirc3vP7eRBRPZmrBFk1X9xHbxJOc2u1j9BlHEk7GzvQb+9NyrFhYGGzUagvRD5weg21 F45x3H93l57dg8XWT2DVghxkE82/IvErvK36aOXxD7KA7zpj6A==; Received: from ex05.nexus.ox.ac.uk ([163.1.154.245] helo=EX05.ad.oak.ox.ac.uk) by relay19.mail.ox.ac.uk with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1uC3Ey-0001cd-CU; Mon, 05 May 2025 22:20:44 +0100 Received: from EX04.ad.oak.ox.ac.uk (163.1.154.244) by EX05.ad.oak.ox.ac.uk (163.1.154.245) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.37; Mon, 5 May 2025 22:20:44 +0100 Received: from LO3P265CU004.outbound.protection.outlook.com (40.93.67.4) by EX04.ad.oak.ox.ac.uk (163.1.154.244) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.37 via Frontend Transport; Mon, 5 May 2025 22:20:44 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pDZqNnVRcgxI2ac+8beIXJ3w8cYCTxiArJkJPpnCNU6nG9mcJZ6SVZWdLKwHyeaz2dBdhI91bmYSc+xWVnRe5FktpRcRv8x/23ICNKEfVg5tDSiniWxR/0qbIHsnwseHF3hHNgScMN+Rc4GhCPImKbD28+OJKkEfYiU6x1/psxyCu74yzExaUcE/YpKohDDFmmTz2jBFjNbm+yxLQ6rqKUl1vofcju3HBn+HGU+a12bIE39pZSSbGwNtsvetvRVumKNQYUtNMjW+QIZVi13a17EzZ4emU7GyRhcJzuIYWChUFCSNzkUs5jhszg8yZFsWLptrykpDxgPwDqNt0LmCSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3OS0J5uQ2A7qkodxTeS1E3sPp4nlwxnVLDOeAWsC0mQ=; b=dhFShV0CsGyc7jG9DxUSTL645r6pUj67ZrlAmz72gum3bb+spsbi7beW3rTrY1DYCZ9J/LmxsbrLLidhhJnuwcvE3DJW+YcJIrj+Xn//noqmOcj6d3cR0nHf+fxPL3k91EoYv6RvvWD5lXcY0T872piY7RNLAYrwkXNxTYClVxskKPYEYURq1kWF8RPBTpnzOtbu4nef9REgQA4/Cy3+7uThiUnILDst1naWqsn/eHLn+ZX44ymR/VzmTJps44m98BY95AgdXrfckn3usJnfUjYPhsecvY8376Q8Ak/6ePDeDohMRC4Qf4XvXvEL0OwMj/KmA3orHgg8mjYdELF5iQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=magd.ox.ac.uk; dmarc=pass action=none header.from=magd.ox.ac.uk; dkim=pass header.d=magd.ox.ac.uk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=UniOxfordNexus.onmicrosoft.com; s=selector2-UniOxfordNexus-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3OS0J5uQ2A7qkodxTeS1E3sPp4nlwxnVLDOeAWsC0mQ=; b=OLGCpHpXQG9phL2MrfF+6lBQrkuPiXo2x+DEWiE8WbCC9TrwaLtz97Ppsrg3FggHqfXrbI2fFMK3qjALEIzXlYl0pOkhBbOJoKWj7UAV+rGtoB7RmdOgLJn78SiEWRHmbJkvzzL5D+714+YMMGCI1Cln+0c+rx7XGUsdI1ak6w1vQyfzQRnJebpD6l3E/PDC9c8h/f5qaUlptORBCd8AvrjDIuETkA4AES5BAtYuNH6mIFGd8ZS5eORsiESjmEzA0YtJNHVl5sOPo/vCYOoS4aaVf6SHSOfAANHR0/BNNhEXroTqlsmYTXVqBmLAuj3J0n9ZnhYrV12ysSUgP7xAfg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=magd.ox.ac.uk; Received: from LO6P265MB6985.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:323::12) by CWLP265MB2164.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:63::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.24; Mon, 5 May 2025 21:20:42 +0000 Received: from LO6P265MB6985.GBRP265.PROD.OUTLOOK.COM ([fe80::639f:86e3:3b7c:f6dd]) by LO6P265MB6985.GBRP265.PROD.OUTLOOK.COM ([fe80::639f:86e3:3b7c:f6dd%5]) with mapi id 15.20.8699.022; Mon, 5 May 2025 21:20:42 +0000 Message-ID: Date: Mon, 5 May 2025 22:20:40 +0100 User-Agent: Mozilla Thunderbird From: Praveen Balakrishnan Subject: [PATCH] media: dvb-usb: az6027: fix return value of az6027_i2c_xfer() To: , , CC: , , , , Content-Language: en-US X-ClientProxiedBy: LO4P123CA0550.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::20) To LO6P265MB6985.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:323::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO6P265MB6985:EE_|CWLP265MB2164:EE_ X-MS-Office365-Filtering-Correlation-Id: 81f63ac2-b360-4ad6-0db1-08dd8c1ab10e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|366016|41320700013|13003099007; X-Microsoft-Antispam-Message-Info: =?utf-8?q?kJLltNAyHSTStdekInWcmB9/v2RjUz0?= =?utf-8?q?UkEPUTRtAJFINskqqtFWhEoF0rB+ykCGBbP26vK2oRgAXzAErNSQI5pq06zKE1fI2?= =?utf-8?q?JyyWIGcS/BrX+vMixlyxA8aTlPDOZRWHQKTc/kv/VJdcP+OuBiLWeytujNeWqLNXL?= =?utf-8?q?3h5AcNsMvJdgzKSXIZ4m/qjTnR9XOyLa/W+jtPVCve+ewUrC+Q9zEzGOoZwYXwBJm?= =?utf-8?q?/Oz4Is8zLwc9lD3nKr5kR4rbFI35TFSU6DVx4KUNZd9JJdhVnTjutCEHu/eDOWk0X?= =?utf-8?q?925jNiqr8qG6ByJ83h3ET3NVP4MuhkzOSZPiYrcmARFGk/xGC+HRVTganhyVedYsA?= =?utf-8?q?p4O8CKlbFf63jSf42srK3xVIfrU8Nyqhr8KZkf0vTemXwyufPGvqy8i5z08CHBoAk?= =?utf-8?q?UP5zbkI72x9GT+NCS9OfHZrS/adLq2u4VAz6khPwl5mngqaHCqAbQwzy+Qo9k6ZZW?= =?utf-8?q?ft8Iq7n1eA/PxL9yJ1PKNcv0IAqGg2nGrqOKCYFRi6gpiqc7eo+KeQ6HP2BCtVLMB?= =?utf-8?q?DeuJpOneBKSNDNJhi75G5RHfFooFS3LdoQ0QNN1AdJoVleCrSsM6xsvopz6GBsiK0?= =?utf-8?q?48/3fJuiqjG1HAbUSigXY2hwnZP6A4IKBUz5PaHa5FSfpIqircZC6nSzb2i2qn0nA?= =?utf-8?q?SRtlAyVbbnHYpt/FkCBOMpEwj2NlaQnWBxy3St+8pfPKgpG/+YFvwEiQUV2iVEvTv?= =?utf-8?q?DjKbMGxLjMI+RftBD1DlRyBjb16pObHdZa3FZb2ADuiHTHi37T9xQ6se6tc5FIa6l?= =?utf-8?q?7omNh26bD200UTWyCkBdB8ibZGnCWzmod6BYPyg1T2PIo5td6vHw1DD7ARJ9vw7V4?= =?utf-8?q?ppFNMog9jbpl5CDgJl2PQYQcMKuOhbmvuKait3Z0J90CzikGnJezofHKwsKnNnk6Q?= =?utf-8?q?hKU64nbfzWpu52CLBWjnenxz+r4d8wEB63ueJqVYRya5RL/0MOucSYaR62RozSBLT?= =?utf-8?q?2G28Il3D87akAYd26f98bjxTOKFWM4QvRE1Mb5qkC/bC853VZRmkfW+wCNcJyyW/t?= =?utf-8?q?Lb26KoHpVmIy6BkQEh1SPKq2KQyTTx7rfrSxExTcVfzsdTNjiWxDiRPk/PNyHcZGk?= =?utf-8?q?v0Gdir/WQbj6lTtOaduyf0P9eiyvp4HVIu5vC3NiNo+ifrRLd+F+96x1sUXOyIydz?= =?utf-8?q?zyqpCNlm3PiONVIoaKtHRRt9aF8C5IAxJbxs3v9ku972K7nUUKANAKyAD6YkkX0z0?= =?utf-8?q?uzowAa3eqgg44NRh/N6x+06goWKbllLrjfPjOmzC/kPsn5xuHF/uUaL9yX9gYc30k?= =?utf-8?q?5BT6axwOxu37D3Gk9stM7C1/UYv1b6fD2CdcObgHikyfdjwr1dUgJsI8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:LO6P265MB6985.GBRP265.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(41320700013)(13003099007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?IF0DiLaODxSkxXNuz+0hXiaWSeA0?= =?utf-8?q?T6HJZZqihKYAj6sOTw2A9OYsykPykdpgr1P8G4oGZjju2++WH0FGJRuWqjueiwOly?= =?utf-8?q?On7etVf7NrotTTFPN5oIDD67iiIlDLVtCZmqtEi0qTJSJnj4a9lKYBc6umNU0Sd/N?= =?utf-8?q?3Q2wRIpPBsq/5a8EwsJDgX4+m8f9oBfeCIH0vuaC2RUE3t9u7AdFEqOsWSnQKGVhE?= =?utf-8?q?uYJWLwB6WkK1AGXzMFs3vkZwGcteLBPdaRXAWAiuvWJj1FPK0sO8KdFxv6fxFYDc/?= =?utf-8?q?bAefFEYhiBtYN+4KWGl4P3u74sxE8Tsv8oHpbmkD8pxOi2RxnKzJD7+cQF4NxJNZ2?= =?utf-8?q?wDlZeBpsENRJKuVMKfaW7sbcNcm2dhRhAYX+xNT7Z2l4HFsv7oSCqCD6QXTXxf2bY?= =?utf-8?q?62uyFlKxpSkLiGAhiwPjZ6BM0juKFLBHhJbT+Jc6xEV2MrKXSHgjdG2QZKRkXgwYc?= =?utf-8?q?uut9596JqPK8J3Mwh2GsW+mlit3ekjOFDYmoN4ednkSETmkr0i/VJgftWXkEfktCu?= =?utf-8?q?Whn1y8mM8BwVyQ6Z2P/Yyt9IGfwtWLqIj/yoDK/rTzW8XHZvDQQPyrL3GwinPssGZ?= =?utf-8?q?xQF0crbqQjDT4q6uzJsHMl85LzQ95TBKa3XBBBlNI1C8h2hbyaAMKEVh5qKcECXdd?= =?utf-8?q?BL/BQH+ZemFrX7sEuTl7fAbAh2E0bDvWhm11/OzW6VTmNG64kPEkt8OLlhL5s5U2v?= =?utf-8?q?9yiKQ5qEfbzJt7mA0tRNVQFZ/dj/FIZc2mRg8yXQ0cY+R0eyxFXrp0xQZLs4+cgl5?= =?utf-8?q?cHOz0BVNGEIoYiQy302+urGXuKpMJ/SedwMn/vLgXg5Mz/34EokOITyXJTgueG2yZ?= =?utf-8?q?h/VjOjsofQog63jSdhKAZByOUY1gNisrJ/UQ47cD1zOmuMQ228KE8NJQUx+PmBPsM?= =?utf-8?q?w/qoTcdPUor5gtVKlIv2pgAYGfercV2oB9hpqqU13NbJzXsc02ogSCnQSlR2npblS?= =?utf-8?q?Ytv6KpQixrHfOco1F6SXaEiDQ9gxmP2KHKNb4Yjys0k8zIA77gaN26SJBX88Se2cq?= =?utf-8?q?EjhxDRc84UWwVh7uIejuaaLnpJ/nRyFYQbRG5YWjlg1Wb7eG4ptMMztlMolTtl07y?= =?utf-8?q?Fg4pzAAb3rvd6BGTC8p+2ZkkpQOuvF0FU9mOb9AxSXphPAgrrMK+hxUPW36CmAWK7?= =?utf-8?q?g+p01+993/VJVQknOI3UDD0EPFV8fEXn/hx/T6vpE6Gx9zc4Af2tlvd74KtfavG5k?= =?utf-8?q?MIMhcWaWzAhCEtjwaZMROITRQDj6cUPGJe1AxIs9A/PW4EDoEeXHoY+VwrzJ49fcN?= =?utf-8?q?WfQJ5WP2/BXGoGvwWpLh9Tbbq+lRcKDAZlIXtr9DGgkqm23g1izAI2yFWJxrhvoFa?= =?utf-8?q?pnE7HZrnEeIaL190AcR9587JnQscWm1nBnEsVkyuRWzXsq6t82jd1hB4tk281aPHx?= =?utf-8?q?L+SMGBtSjQLsyuGPNrZgbBIHRKvb7qfrgONdzOVVMPt+osSYzflfMe14R7tCXZj6c?= =?utf-8?q?Hr77Jp7JlCbT8XldHTQ4sfg+2TAsHycTHvRo7nx/xl5QfkC2UcIUnm24xam3jTBbb?= =?utf-8?q?71EZKqjee+Kj?= X-MS-Exchange-CrossTenant-Network-Message-Id: 81f63ac2-b360-4ad6-0db1-08dd8c1ab10e X-MS-Exchange-CrossTenant-AuthSource: LO6P265MB6985.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2025 21:20:42.5034 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: cc95de1b-97f5-4f93-b4ba-fe68b852cf91 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sUaTJ7e0ptTQUhAF9fB0rLUC5M654/1ACXFjnk5utILAcevWemawMf/UT5F2XKkTaqDjFh3WZVTWuEX3yiTz+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWLP265MB2164 X-OriginatorOrg: magd.ox.ac.uk X-NTG-DKIM-verify: pass syzbot found an infoleak bug triggered by the az6027 driver [1]. In az6027_i2c_xfer, the return value counts the number of messages passed to it, when it should count actually executed messages. As a result, i2cdev_ioctl_smbus can copy an unwritten buffer to the user. Introduce a separate return value counter that only counts executed messages. [1] https://syzkaller.appspot.com/bug?extid=08b819a87faa6def6dfb Closes: https://syzkaller.appspot.com/bug?extid=08b819a87faa6def6dfb Tested-by: syzbot+08b819a87faa6def6dfb@syzkaller.appspotmail.com Reported-by: syzbot+08b819a87faa6def6dfb@syzkaller.appspotmail.com Signed-off-by: Praveen Balakrishnan --- drivers/media/usb/dvb-usb/az6027.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/dvb-usb/az6027.c b/drivers/media/usb/dvb-usb/az6027.c index 056935d3cbd6..be9cbbd4723d 100644 --- a/drivers/media/usb/dvb-usb/az6027.c +++ b/drivers/media/usb/dvb-usb/az6027.c @@ -957,6 +957,7 @@ static int az6027_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], int n int length; u8 req; u8 *data; + int ret = 0; data = kmalloc(256, GFP_KERNEL); if (!data) @@ -976,12 +977,13 @@ static int az6027_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], int n req = 0xBE; index = 0; if (msg[i].len < 1) { - i = -EOPNOTSUPP; + ret = -EOPNOTSUPP; break; } value = msg[i].buf[0] & 0x00ff; length = 1; az6027_usb_out_op(d, req, value, index, data, length); + ret++; } if (msg[i].addr == 0xd0) { @@ -1001,12 +1003,13 @@ static int az6027_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], int n msg[i + 1].buf[j] = data[j + 5]; i++; + ret++; } else { /* demod 16bit addr */ req = 0xBD; if (msg[i].len < 1) { - i = -EOPNOTSUPP; + ret = -EOPNOTSUPP; break; } index = (((msg[i].buf[0] << 8) & 0xff00) | (msg[i].buf[1] & 0x00ff)); @@ -1017,6 +1020,7 @@ static int az6027_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], int n data[j] = msg[i].buf[j + 2]; az6027_usb_out_op(d, req, value, index, data, length); } + ret++; } if (msg[i].addr == 0xc0) { @@ -1035,7 +1039,7 @@ static int az6027_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], int n req = 0xBD; if (msg[i].len < 1) { - i = -EOPNOTSUPP; + ret = -EOPNOTSUPP; break; } index = msg[i].buf[0] & 0x00FF; @@ -1048,12 +1052,13 @@ static int az6027_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], int n az6027_usb_out_op(d, req, value, index, data, length); } + ret++; } } mutex_unlock(&d->i2c_mutex); kfree(data); - return i; + return ret; }