diff options
author | Mark Salyzyn <salyzyn@google.com> | 2014-03-20 23:22:29 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-03-20 23:22:30 +0000 |
commit | 75cd8ffa850aa6414d1771bbc44c4ae806702b85 (patch) | |
tree | c7d71c1bdbe351bd0692e502e0f1b90662663287 | |
parent | c42f1cc240aa3828bf5982f2d05a7804cc06d5ef (diff) | |
parent | b945dfe2bf0645db0516885087225e678fe96699 (diff) | |
download | extras-75cd8ffa850aa6414d1771bbc44c4ae806702b85.tar.gz |
Merge "qtaguid test: 64-bit compile issues"
-rw-r--r-- | tests/iptables/qtaguid/socketTag.cpp | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/tests/iptables/qtaguid/socketTag.cpp b/tests/iptables/qtaguid/socketTag.cpp index fb7ecdcd..6cdc5428 100644 --- a/tests/iptables/qtaguid/socketTag.cpp +++ b/tests/iptables/qtaguid/socketTag.cpp @@ -23,6 +23,7 @@ #include <assert.h> #include <errno.h> #include <fcntl.h> +#include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <gtest/gtest.h> @@ -55,6 +56,9 @@ int openCtrl() { return ctrl; } +int doCtrlCommand(const char *fmt, ...) + __attribute__((__format__(__printf__, 1, 2))); + int doCtrlCommand(const char *fmt, ...) { char *buff; int ctrl; @@ -100,7 +104,7 @@ int SockInfo::setup(uint64_t tag) { testPrintE("socket creation failed: %s", strerror(errno)); return -1; } - if (doCtrlCommand("t %d %llu", fd, tag) < 0) { + if (doCtrlCommand("t %d %" PRIu64, fd, tag) < 0) { testPrintE("socket setup: failed to tag"); close(fd); return -1; @@ -151,11 +155,11 @@ bool SockInfo::checkTag(uint64_t acct_tag, uid_t uid) { if (addr) { assert(sizeof(void*) == sizeof(long int)); // Why does %p use 0x? grrr. %lx. - asprintf(&match_template, "sock=%lx %s", addr, "tag=0x%llx (uid=%u)"); + asprintf(&match_template, "sock=%" PRIxPTR " %s", (uintptr_t)addr, "tag=0x%" PRIx64" (uid=%u)"); } else { /* Allocate for symmetry */ - asprintf(&match_template, "%s", " tag=0x%llx (uid=%u)"); + asprintf(&match_template, "%s", " tag=0x%" PRIx64 " (uid=%u)"); } full_tag = acct_tag | uid; @@ -167,8 +171,8 @@ bool SockInfo::checkTag(uint64_t acct_tag, uid_t uid) { if (pos && !addr) { assert(sizeof(void*) == sizeof(long int)); // Why does %p use 0x? grrr. %lx. res = sscanf(pos - strlen("sock=1234abcd"), - "sock=%lx tag=0x%llx (uid=%lu) pid=%u f_count=%lu", - &addr, &k_tag, &k_uid, &dummy_pid, &dummy_count ); + "sock=%" SCNxPTR " tag=0x%" SCNx64 " (uid=%" SCNu32 ") pid=%u f_count=%lu", + (uintptr_t *)&addr, &k_tag, &k_uid, &dummy_pid, &dummy_count ); if (!(res == 5 && k_tag == full_tag && k_uid == uid)) { testPrintE("Unable to read sock addr res=%d", res); addr = 0; @@ -199,8 +203,10 @@ protected: valid_tag2 = ((uint64_t)my_pid << 48) | ((uint64_t)testRand() << 32); valid_tag2 &= 0xffffff00ffffffffllu; // Leave some room to make counts visible. testPrintI("* start: pid=%lu uid=%lu uid1=0x%lx/%lu uid2=0x%lx/%lu" - " tag1=0x%llx/%llu tag2=0x%llx/%llu", - my_pid, my_uid, fake_uid, fake_uid, fake_uid2, fake_uid2, + " tag1=0x%" PRIx64 "/%" PRIu64 " tag2=0x%" PRIx64 "/% "PRIu64, + (unsigned long)my_pid, (unsigned long)my_uid, + (unsigned long)fake_uid, (unsigned long)fake_uid, + (unsigned long)fake_uid2, (unsigned long)fake_uid2, valid_tag1, valid_tag1, valid_tag2, valid_tag2); max_uint_tag = 0xffffffff00000000llu; max_uint_tag = 1llu << 63 | (((uint64_t)my_pid << 48) ^ max_uint_tag); @@ -259,14 +265,14 @@ TEST_F(SocketTaggingTest, TagData) { testPrintI("tag quota reach limit"); for (int cnt = 0; cnt < max_tags; cnt++ ) { uint64_t tag = valid_tag2 + ((uint64_t)cnt << 32); - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, tag , fake_uid2), 0) + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, tag , fake_uid2), 0) << "Tagging within limit failed"; EXPECT_TRUE(sock0.checkTag(tag, fake_uid2))<< "Unexpected results: tag not found"; } testPrintI("tag quota go over limit"); uint64_t new_tag = valid_tag2 + ((uint64_t)max_tags << 32); - EXPECT_LT(doCtrlCommand("t %d %llu %u", sock0.fd, new_tag , fake_uid2), 0); + EXPECT_LT(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, new_tag, fake_uid2), 0); EXPECT_TRUE(sock0.checkTag(valid_tag2 + (((uint64_t)max_tags - 1) << 32), fake_uid2)) << "Unexpected results: tag not found"; @@ -277,22 +283,22 @@ TEST_F(SocketTaggingTest, TagData) { testPrintI("tag after untag should not free up max tags"); uint64_t new_tag2 = valid_tag2 + ((uint64_t)max_tags << 32); - EXPECT_LT(doCtrlCommand("t %d %llu %u", sock0.fd, new_tag2 , fake_uid2), 0); + EXPECT_LT(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, new_tag2 , fake_uid2), 0); EXPECT_FALSE(sock0.checkTag(valid_tag2 + ((uint64_t)max_tags << 32), fake_uid2)) << "Tag should not be there"; testPrintI("delete one tag"); uint64_t new_tag3 = valid_tag2 + (((uint64_t)max_tags / 2) << 32); - EXPECT_GE(doCtrlCommand("d %llu %u", new_tag3, fake_uid2), 0); + EXPECT_GE(doCtrlCommand("d %" PRIu64 " %u", new_tag3, fake_uid2), 0); testPrintI("2 tags after 1 delete pass/fail"); uint64_t new_tag4; new_tag4 = valid_tag2 + (((uint64_t)max_tags + 1 ) << 32); - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, new_tag4 , fake_uid2), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, new_tag4 , fake_uid2), 0); EXPECT_TRUE(sock0.checkTag(valid_tag2 + (((uint64_t)max_tags + 1) << 32), fake_uid2)) << "Tag not found"; new_tag4 = valid_tag2 + (((uint64_t)max_tags + 2 ) << 32); - EXPECT_LT(doCtrlCommand("t %d %llu %u", sock0.fd, new_tag4 , fake_uid2), 0); + EXPECT_LT(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, new_tag4 , fake_uid2), 0); EXPECT_FALSE(sock0.checkTag(valid_tag2 + (((uint64_t)max_tags + 2) << 32), fake_uid2)) << "Tag should not be there"; @@ -319,19 +325,19 @@ TEST_F(SocketTaggingTest, NoTagNoUid) { TEST_F(SocketTaggingTest, InvalidTagFail) { // Invalid tag. Expected failure - EXPECT_LE(doCtrlCommand("t %d %llu", sock0.fd, invalid_tag1), 0); + EXPECT_LE(doCtrlCommand("t %d %" PRIu64, sock0.fd, invalid_tag1), 0); ASSERT_FALSE(sock0.checkTag(invalid_tag1, my_uid)) << "Tag should not be there"; } TEST_F(SocketTaggingTest, ValidTagWithNoUid) { // Valid tag with no uid - EXPECT_GE(doCtrlCommand("t %d %llu", sock0.fd, valid_tag1), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64, sock0.fd, valid_tag1), 0); EXPECT_TRUE(sock0.checkTag(valid_tag1, my_uid)) << "Tag not found"; } TEST_F(SocketTaggingTest, ValidUntag) { // Valid untag - EXPECT_GE(doCtrlCommand("t %d %llu", sock0.fd, valid_tag1), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64, sock0.fd, valid_tag1), 0); EXPECT_TRUE(sock0.checkTag(valid_tag1, my_uid)) << "Tag not found"; EXPECT_GE(doCtrlCommand("u %d", sock0.fd), 0); EXPECT_FALSE(sock0.checkTag(valid_tag1, my_uid)) << "Tag should be removed"; @@ -339,40 +345,40 @@ TEST_F(SocketTaggingTest, ValidUntag) { TEST_F(SocketTaggingTest, ValidFirsttag) { // Valid 1st tag - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag2, fake_uid), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag2, fake_uid), 0); EXPECT_TRUE(sock0.checkTag(valid_tag2, fake_uid)) << "Tag not found."; } TEST_F(SocketTaggingTest, ValidReTag) { // Valid re-tag - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag2, fake_uid), 0); - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag2, fake_uid), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag2, fake_uid), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag2, fake_uid), 0); EXPECT_TRUE(sock0.checkTag(valid_tag2, fake_uid)) << "Tag not found."; } TEST_F(SocketTaggingTest, ValidReTagWithAcctTagChange) { // Valid re-tag with acct_tag change - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag2, fake_uid), 0); - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag1, fake_uid), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag2, fake_uid), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag1, fake_uid), 0); EXPECT_TRUE(sock0.checkTag(valid_tag1, fake_uid)) << "Tag not found."; } TEST_F(SocketTaggingTest, ReTagWithUidChange) { // Re-tag with uid change - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag1, fake_uid), 0); - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag2, fake_uid2), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag1, fake_uid), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag2, fake_uid2), 0); } TEST_F(SocketTaggingTest, Valid64BitAcctTag) { // Valid 64bit acct tag - EXPECT_GE(doCtrlCommand("t %d %llu", sock0.fd, max_uint_tag), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64, sock0.fd, max_uint_tag), 0); EXPECT_TRUE(sock0.checkTag(max_uint_tag, my_uid)) << "Tag not found."; } TEST_F(SocketTaggingTest, TagAnotherSocket) { testPrintI("Tag two sockets"); - EXPECT_GE(doCtrlCommand("t %d %llu", sock0.fd, max_uint_tag), 0); - EXPECT_GE(doCtrlCommand("t %d %llu %u", sock1.fd, valid_tag1, fake_uid2), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64, sock0.fd, max_uint_tag), 0); + EXPECT_GE(doCtrlCommand("t %d %" PRIu64 " %u", sock1.fd, valid_tag1, fake_uid2), 0); EXPECT_TRUE(sock1.checkTag(valid_tag1, fake_uid2)) << "Tag not found."; testPrintI("Untag socket0 of them only."); EXPECT_GE(doCtrlCommand("u %d", sock0.fd), 0); @@ -386,7 +392,7 @@ TEST_F(SocketTaggingTest, TagAnotherSocket) { TEST_F(SocketTaggingTest, TagInvalidSocketFail) { // Invalid tag. Expected failure close(sock0.fd); - EXPECT_LE(doCtrlCommand("t %d %llu %u", sock0.fd, valid_tag1, my_uid), 0); + EXPECT_LE(doCtrlCommand("t %d %" PRIu64 " %u", sock0.fd, valid_tag1, my_uid), 0); EXPECT_FALSE(sock0.checkTag(valid_tag1, my_uid)) << "Tag should not be there"; } |