From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70050.outbound.protection.outlook.com [40.107.7.50]) by sourceware.org (Postfix) with ESMTPS id 3E2B3385C426 for ; Fri, 30 Sep 2022 10:47:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3E2B3385C426 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=fmADmOgsmWauyKRPHUCkFj62UzIUT1OQE1O3XEkf78Zp9Zuyw8l6lGYyhllpBKvlEjijOhFBdrwCE0/mtaY/TKNVmj8v0vqsvxlPwddDoX0+/1X5ffG/wNSwOFV9S0J065cOHqqLQhG3RK0eHnL+3K5ZXOsSsFHxu35r+qSadxR8DNt7bm6dq/eqcJv1X3NL7WjLd0mH92hl0SwkAQoi3YEbzBHjjRjbj7EgbVaKwEHZrgcqoiLFrJOs80VWsyc7IUpYNeeK900rP5P1JnX8I6sG9C4n+k1i+omYm0mXlCMiBRNUYY7ta37Sa9mZSogJbdKsraGI/E28/Wl16XAegQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=IywbdhcjrKjbNY4TzDdRzvWrdNgScUWD+x/baI/PgWE=; b=NC7vebceO9Heu9Gqe8HpnY8TxcWW8hBGS2RxRLYdq9L9sSaXzycyR9SVEncMjfSmP/tCvQ0CdMJw0GCplUpdmTHJwiEvHkJsSEyWtfwilaS1og/4AM+/xlMNqBlN9NYUipC8R4tFrUJATbIt7fpxRrTaQ4WwoMtnfe8RxQxDw0nHVWNVxvrdRuB32Hw0LtlzH27K/iJuVtzLksNlMygCwbDq8mRmovhxKWHDl4bufi6r9RbNvHDzGLuGVwd4MTkpvzF3Xq6TfThheou8VepEEcKtMBETlA9mZ3l14GtmLVFr7SD1mioYxIVRfUlzGfhgRPwHFBTnOnykqh9ZD1d4MQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IywbdhcjrKjbNY4TzDdRzvWrdNgScUWD+x/baI/PgWE=; b=Bo6p2AtZMXSbzXIjK/N7Xfzeo9Jf4prZFFs/JxubU82cS/oYgb6uNoCrJQx6nd5/Hf00tOmdC8JT8QZZFCHhu1b5MUhFk/SinMkZj6hYK0HLdBxztBGKsEEIlds+GIfKNNsM5yAgV3jkxznIcb+KPReYdvKC+7EGZs2Hnur2b0w= Received: from FR0P281CA0112.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a8::11) by DU0PR08MB7462.eurprd08.prod.outlook.com (2603:10a6:10:355::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.25; Fri, 30 Sep 2022 10:47:45 +0000 Received: from VE1EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:a8:cafe::d9) by FR0P281CA0112.outlook.office365.com (2603:10a6:d10:a8::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.23 via Frontend Transport; Fri, 30 Sep 2022 10:47:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT016.mail.protection.outlook.com (10.152.18.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17 via Frontend Transport; Fri, 30 Sep 2022 10:47:45 +0000 Received: ("Tessian outbound 99ee3885c6d5:v128"); Fri, 30 Sep 2022 10:47:44 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: ce7031b508f72176 X-CR-MTA-TID: 64aa7808 Received: from 8e2f54c09660.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C6AD3C48-BEE3-4C57-96D7-D7E33F20255B.1; Fri, 30 Sep 2022 10:47:38 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8e2f54c09660.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 30 Sep 2022 10:47:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YWSNVjI6GDyafKqI9lDe/SiZim+dRWbfcXrsgYJaGiCDd6n/OMwl5SpYXDDl8hm4z+vBMKB0whwDKb95SVSGWYAAZdh/djHqamZ/WyO4aQ9qJ75SE3aOs8gJaO2/SAsbYC0FALSYbevhwLXKqLeb8RhMrqDjV1mhW/Fz2JQcWaFq7HHEIG+MoZv+7rZKdVdeMVSFEgZqjNITGD60Sj2Vyj9Z8BPTTxIRfF94mV694ZM3SN+r6TPmu0erytDSWC220QMrWsx5Y4QYeZhpiAR4iQO5QH7gegL7Rn7ocHPQ6i2759TDK7fp9mfHs+QReqYPkV5Fz7hI9osS/2PnOtLFyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=IywbdhcjrKjbNY4TzDdRzvWrdNgScUWD+x/baI/PgWE=; b=Vf7tfmfpD4jdV14tmFwIoXJOiCYiCs6oQix5pDE8oYUPZ/eFAFA+lwyAKJPiYSh4XxjVH8h67U0MXrz0nPxeI6PxwM3erC1UrqSzQSKogVVPBWMUbQ8Sw+Yk5ScM5tnncbTMwgklJtgdeW1ZE9tUtRYH0593mPZB88M3w1m52MBuIvy6yDax3S8p1jfGlFzK89Pf8k218qHb0kOdprojZYPTaKVQDZgyKu45BVw+cJR3NHsoAj2QmqGFzI8x+bmH3waNJj6ATZvYHu7JGeOZZfxXN6wFYNP8rXMfom3WcNJ6F2tqtU+kUreW0wIna7iPGqn8FDHTHgzA61rCbhmqBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IywbdhcjrKjbNY4TzDdRzvWrdNgScUWD+x/baI/PgWE=; b=Bo6p2AtZMXSbzXIjK/N7Xfzeo9Jf4prZFFs/JxubU82cS/oYgb6uNoCrJQx6nd5/Hf00tOmdC8JT8QZZFCHhu1b5MUhFk/SinMkZj6hYK0HLdBxztBGKsEEIlds+GIfKNNsM5yAgV3jkxznIcb+KPReYdvKC+7EGZs2Hnur2b0w= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DB9PR08MB7179.eurprd08.prod.outlook.com (2603:10a6:10:2cc::19) by AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.15; Fri, 30 Sep 2022 10:47:37 +0000 Received: from DB9PR08MB7179.eurprd08.prod.outlook.com ([fe80::d5df:4125:b701:4cd4]) by DB9PR08MB7179.eurprd08.prod.outlook.com ([fe80::d5df:4125:b701:4cd4%7]) with mapi id 15.20.5676.023; Fri, 30 Sep 2022 10:47:36 +0000 Date: Fri, 30 Sep 2022 11:47:22 +0100 From: Szabolcs Nagy To: Adhemerval Zanella Cc: libc-alpha@sourceware.org, Florian Weimer , Carlos O'Donell Subject: Re: [PATCH v5 2/3] linux: Fix ancillary 64-bit time timestamp conversion (BZ #28349, BZ#28350) Message-ID: References: <20220127201542.2306657-1-adhemerval.zanella@linaro.org> <20220127201542.2306657-3-adhemerval.zanella@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20220127201542.2306657-3-adhemerval.zanella@linaro.org> X-ClientProxiedBy: LO4P265CA0122.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2c6::15) To DB9PR08MB7179.eurprd08.prod.outlook.com (2603:10a6:10:2cc::19) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB9PR08MB7179:EE_|AM9PR08MB6737:EE_|VE1EUR03FT016:EE_|DU0PR08MB7462:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fbe72be-202c-46cd-2593-08daa2d13550 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: kEWjEWXiUG/OYeWiVVbBMF/CrSr6YjYLbeN90s+RDm2A3aR0Rd2AwwCEB+FqnAgIHuqUVF0a/dDv7fvQai5WNhJSIF2/IneKsA8jgjc5VQxzcSxcFGMgQycD/8DgFH89/fMd0v5Zr9f7LwQUpVvPR7u5X2KzBlwkI4tIK0+f16b1LX5QwZy/TJAz0eEAwrPP5RPi8VM+RZzbPmeqYtsQjBOqyE6iNTavTvtw8F45hwjVtWhQtm3fNNVOtswxNN4WrcSjzRrU2ga4+UoXErFbijGfSvpsRMPfQJbZtUDVB0pnKVMlxkbeMSDdtHcdFeGqRA99fxgvO7DCXKqhQDSim+BvirSi1xDXNXqY3AXMRZV4YFReAzEHyukhc8pin8w28ArNrIGRpOuf+FnKPHBiCEhc7+Xo+1fSZanHtkmQefLJPQgubpX2lzaoCj9/9D/np+RLjMBrZwo2v2JA382YaW/yu+VtJ1MRqI8k0XBTIhh0h88TAwLsjkGb+qMprtaHiW0Q931AmHcvJgs75d1nEcai6W62AmFOrtr3iI89Torji4R5g0WPdQOb6BgSzyW5HS+x7uckNdmsqUkZzQGHDAAef5PYMWcbMoFTALh9b8f5VwAk2MDj5rKp/b7IUEwdmqWGHDQ6m1yOMQGBh4DJ2/+iwzSJKanoF2l6+o+eqYw9XDZCbSUBfkFSC5FDAksFiILgJrHUCZ/sleEy1zJCox8C2fxBh4WyTlQo6hDRgbf745/3MmAOPA8aWhfgqn/9 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB7179.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(346002)(396003)(376002)(136003)(366004)(451199015)(41300700001)(5660300002)(44832011)(2906002)(6666004)(8936002)(6506007)(6486002)(6512007)(36756003)(66476007)(8676002)(83380400001)(478600001)(2616005)(66556008)(66946007)(316002)(186003)(6916009)(54906003)(26005)(86362001)(4326008)(38100700002)(67856001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6737 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT016.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4b4cbd9b-01b0-43b7-18ad-08daa2d12ff5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hPRGwDMPlD5IgLLnBpqryckqA4apoEZp60JSyE4GRxjDXBU9nr2wo7qvErCKusbB3zqA3YWwCwZbYJborPIIJ0nqbrixe0DVc9x9UqR3uFIVV86FCikH+zqIV4yIf4vQkPPNYI65RoigLiB282oc78wXpF8rTgjxaXkutgz6mEXTtjnS3W9+c2MBpWqZN+kDH64vWJFYCqf/vtzSFljw4Vy3Qeic3aLA9FMRQ5oBYsL8RS9LXzlEpmbH39cYbzawMb0MKhJUWsgN+YsO9MYBhfceD7Y7CLxX1UpQI5TKkLOB/T3ayj6+GeHugYLl9MTpahjspKBr+MZxZ8jS7luG9HYyTE6x8vxjdAlwDzOHzJx567WKhxfmpkDMzOpm2M61atbz/Uxz0LYp6CCnzXJsQEEfgqftcJGLaKNaLwhgbKDx1fFYOE0bLV0iwvmuV3WgbHHZdx0ibCRcrEiuZXENm+9DavoCl7onCZCbNghBcD+HzC4RNjze0qrG0NW4WjdPFeuDM0LOgjCQHz1FANxRZDe06q6qFFaEiGJh1q70P2emDqOwSkx8BVsmJNbFqA6saISNKGo9Z9vpP9P5Qs04QW9JlpZuUQZCQYfu9Z5n7OJxJH0XrF0g/o9+9vBMMRe767E0CmVTFP9+s6DHiXaNjyYu6rZYwp+wEe1K9D5WQacyt2F9vKINbRsvjNCk7GwnxbbeC1Nlr+Us/GlGBxtcejtv6DM0VUdulMeLe7AV6NLtWsuvB0UUE6DDDZtEY0BzCwaDO+Ncm7Zt3PKbi7pmDtrY8e73q6c56vRB/PDZ0ZY= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(346002)(39860400002)(396003)(136003)(376002)(451199015)(36840700001)(40470700004)(46966006)(40480700001)(54906003)(316002)(6486002)(478600001)(70206006)(4326008)(86362001)(8676002)(47076005)(44832011)(41300700001)(6666004)(82740400003)(5660300002)(83380400001)(40460700003)(36860700001)(6862004)(26005)(70586007)(107886003)(6506007)(6512007)(8936002)(81166007)(336012)(356005)(82310400005)(2906002)(36756003)(2616005)(186003)(67856001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2022 10:47:45.1562 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0fbe72be-202c-46cd-2593-08daa2d13550 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT016.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB7462 X-Spam-Status: No, score=-5.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: The 01/27/2022 17:15, Adhemerval Zanella via Libc-alpha wrote: > The __convert_scm_timestamps only updates the control message last > pointer for SOL_SOCKET type, so if the message control buffer contains > multiple ancillary message types the converted timestamp one might > overwrite a valid message. > > The test checks if the extra ancillary space is correctly handled > by recvmsg/recvmmsg, where if there is no extra space for the 64-bit > time_t converted message the control buffer should be marked with > MSG_TRUNC. It also check if recvmsg/recvmmsg handle correctly multiple > ancillary data. > > Checked on x86_64-linux and on i686-linux-gnu on both 5.11 and > 4.15 kernel. > > Co-authored-by: Fabian Vogt note: the time64 recvmsg test started to fail on 32bit arm after i updated my aarch64 kernel to 5.18 FAIL: socket/tst-socket-timestamp-time64 ../sysdeps/unix/sysv/linux/tst-socket-timestamp.c:136: numeric comparison failure left: 0 (0x0); from: timestamp right: 1 (0x1); from: exp_timestamp > +static void > +do_recvmsg_slack_ancillary (bool use_multi_call, int s, void *cmsg, > + size_t slack, size_t tsize, int exp_payload) > +{ > + int payload; > + struct iovec iov = > + { > + .iov_base = &payload, > + .iov_len = sizeof (payload) > + }; > + size_t msg_controllen = CMSG_SPACE (tsize) + slack; > + char *msg_control = cmsg - msg_controllen; > + memset (msg_control, 0x55, msg_controllen); > + struct mmsghdr mmhdr = > + { > + .msg_hdr = > + { > + .msg_name = NULL, > + .msg_namelen = 0, > + .msg_iov = &iov, > + .msg_iovlen = 1, > + .msg_control = msg_control, > + .msg_controllen = msg_controllen > + }, > + }; > + > + int r; > + if (use_multi_call) > + { > + r = recvmmsg (s, &mmhdr, 1, 0, NULL); > + if (r >= 0) > + r = mmhdr.msg_len; > + } > + else > + r = recvmsg (s, &mmhdr.msg_hdr, 0); > + TEST_COMPARE (r, sizeof (int)); > + TEST_COMPARE (payload, exp_payload); > + > + if (cmsg == NULL) > + return; > + > + /* A timestamp is expected if 32-bit timestamp are used (support in every > + configuration) or if underlying kernel support 64-bit timestamps. > + Otherwise recvmsg will need extra space do add the 64-bit timestamp. */ > + bool exp_timestamp; > + if (sizeof (time_t) == 4 || support_64_timestamp) > + exp_timestamp = true; > + else > + exp_timestamp = slack >= CMSG_SPACE (tsize); > + > + bool timestamp = false; > + for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr); > + cmsg != NULL; > + cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg)) > + { > + if (cmsg->cmsg_level != SOL_SOCKET) > + continue; > + if (cmsg->cmsg_type == SCM_TIMESTAMP > + && cmsg->cmsg_len == CMSG_LEN (sizeof (struct timeval))) in strace i see recvmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\0\0\0\0", iov_len=4}], msg_iovlen=1, msg_control=[{cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_TIMESTAMP, cmsg_data={tv_sec=1664533412, tv_usec=56794}}], msg_controllen=20, msg_flags=0}, 0) = 4 i.e. cmsg->cmsg_len == 20, but CMSG_LEN (sizeof (struct timeval)) is 28. in the loop sometimes i also see a second cmsg where cmsg->cmsg_type == SO_TIMESTAMP_NEW and cmsg->cmsg_len == 28, but then the type does not match. same behaviour with recvmmsg_time64 (but my strace is too old to show that). not sure how to debug this further. > + { > + struct timeval tv; > + memcpy (&tv, CMSG_DATA (cmsg), sizeof (tv)); > + if (test_verbose) > + printf ("SCM_TIMESTAMP: {%jd, %jd}\n", (intmax_t)tv.tv_sec, > + (intmax_t)tv.tv_usec); > + timestamp = true; > + } > + else if (cmsg->cmsg_type == SCM_TIMESTAMPNS > + && cmsg->cmsg_len == CMSG_LEN (sizeof (struct timespec))) > + { > + struct timespec ts; > + memcpy (&ts, CMSG_DATA (cmsg), sizeof (ts)); > + if (test_verbose) > + printf ("SCM_TIMESTAMPNS: {%jd, %jd}\n", (intmax_t)ts.tv_sec, > + (intmax_t)ts.tv_nsec); > + timestamp = true; > + } > + } > + > + TEST_COMPARE (timestamp, exp_timestamp); this fails with false != true.