mirror of
https://github.com/openappsec/openappsec.git
synced 2025-09-29 11:16:30 +03:00
Jun 16th update
This commit is contained in:
@@ -21,7 +21,7 @@ extern void (*debug_int)(int is_error, const char *func, const char *file, int l
|
||||
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
||||
#endif
|
||||
|
||||
enum debugLevel { TraceLevel = 0, WarningLevel = 3 };
|
||||
enum debugLevel { TraceLevel = 0, DebugLevel = 1, WarningLevel = 3 };
|
||||
|
||||
#define writeDebug(debug_level, fmt, ...) \
|
||||
{ \
|
||||
|
@@ -140,14 +140,13 @@ createSharedRingQueue(const char *shared_location_name, uint16_t num_of_data_seg
|
||||
|
||||
g_num_of_data_segments = num_of_data_segments;
|
||||
|
||||
fd = shm_open(shared_location_name, shmem_fd_flags, S_IRUSR | S_IWUSR);
|
||||
fd = shm_open(shared_location_name, shmem_fd_flags, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
if (fd == -1) {
|
||||
writeDebug(
|
||||
WarningLevel,
|
||||
"createSharedRingQueue: Failed to open shared memory for '%s'. Errno: %d (%s)\n",
|
||||
"createSharedRingQueue: Failed to open shared memory for '%s'. Errno: %d\n",
|
||||
shared_location_name,
|
||||
errno,
|
||||
strerror(errno)
|
||||
errno
|
||||
);
|
||||
return NULL;
|
||||
}
|
||||
@@ -384,7 +383,7 @@ pushBuffersToQueue(
|
||||
large_total_elem_size,
|
||||
max_write_size
|
||||
);
|
||||
return -1;
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
total_elem_size = (uint16_t)large_total_elem_size;
|
||||
@@ -400,18 +399,18 @@ pushBuffersToQueue(
|
||||
|
||||
|
||||
if (!isThereEnoughMemoryInQueue(write_pos, read_pos, num_of_segments_to_write)) {
|
||||
writeDebug(WarningLevel, "Cannot write to a full queue\n");
|
||||
return -1;
|
||||
writeDebug(DebugLevel, "Cannot write to a full queue");
|
||||
return -3;
|
||||
}
|
||||
|
||||
if (write_pos >= g_num_of_data_segments) {
|
||||
writeDebug(
|
||||
WarningLevel,
|
||||
DebugLevel,
|
||||
"Cannot write to a location outside the queue. Write index: %u, number of queue elements: %u",
|
||||
write_pos,
|
||||
g_num_of_data_segments
|
||||
);
|
||||
return -1;
|
||||
return -4;
|
||||
}
|
||||
|
||||
if (write_pos + num_of_segments_to_write > g_num_of_data_segments) {
|
||||
@@ -488,16 +487,14 @@ popFromQueue(SharedRingQueue *queue)
|
||||
}
|
||||
num_of_read_segments = getNumOfDataSegmentsNeeded(buffer_mgmt[read_pos]);
|
||||
|
||||
end_pos = read_pos + num_of_read_segments;
|
||||
if (read_pos + num_of_read_segments > g_num_of_data_segments) {
|
||||
for ( ; read_pos < g_num_of_data_segments; ++read_pos ) {
|
||||
buffer_mgmt[read_pos] = empty_buff_mgmt_magic;
|
||||
}
|
||||
read_pos = 0;
|
||||
}
|
||||
|
||||
writeDebug(
|
||||
TraceLevel,
|
||||
"Size of data to remove: %u, number of queue elements to free: %u, current read index: %u, end index: %u",
|
||||
buffer_mgmt[read_pos],
|
||||
num_of_read_segments,
|
||||
read_pos,
|
||||
end_pos
|
||||
);
|
||||
end_pos = read_pos + num_of_read_segments;
|
||||
|
||||
for ( ; read_pos < end_pos; ++read_pos ) {
|
||||
buffer_mgmt[read_pos] = empty_buff_mgmt_magic;
|
||||
@@ -509,6 +506,15 @@ popFromQueue(SharedRingQueue *queue)
|
||||
}
|
||||
}
|
||||
|
||||
writeDebug(
|
||||
TraceLevel,
|
||||
"Size of data to remove: %u, number of queue elements to free: %u, current read index: %u, end index: %u",
|
||||
buffer_mgmt[read_pos],
|
||||
num_of_read_segments,
|
||||
read_pos,
|
||||
end_pos
|
||||
);
|
||||
|
||||
if (read_pos == g_num_of_data_segments) read_pos = 0;
|
||||
|
||||
queue->read_pos = read_pos;
|
||||
|
@@ -50,7 +50,6 @@ debugInitial(int is_error, const char *func, const char *file, int line_num, con
|
||||
va_start(args, fmt);
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void (*debug_int)(int is_error, const char *func, const char *file, int line_num, const char *fmt, ...) = debugInitial;
|
||||
@@ -101,7 +100,7 @@ createOneWayIPCQueue(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (is_owner && chown(shmem_path, user_id, group_id) == -1) {
|
||||
if (is_owner && chmod(shmem_path, 0666) == -1) {
|
||||
writeDebug(WarningLevel, "Failed to set the permissions");
|
||||
destroySharedRingQueue(ring_queue, is_owner, isTowardsOwner(is_owner, is_tx_queue));
|
||||
return NULL;
|
||||
|
@@ -6,8 +6,7 @@ using namespace std;
|
||||
using namespace testing;
|
||||
|
||||
const static string bad_shmem_path = "/root/sadsadsadad/444";
|
||||
const static string valid_shmem_file_name = "shmem_ut";
|
||||
const static string valid_shmem_path = "/dev/shm/" + valid_shmem_file_name;
|
||||
const static string valid_shmem_path = "shmem_ut";
|
||||
const uint16_t max_num_of_data_segments = sizeof(DataSegment)/sizeof(uint16_t);
|
||||
const static uint16_t num_of_shmem_elem = 11;
|
||||
|
||||
@@ -16,11 +15,8 @@ class SharedRingQueueTest : public Test
|
||||
public:
|
||||
SharedRingQueueTest()
|
||||
{
|
||||
// remove old fd from prev tests
|
||||
unlink(valid_shmem_path.c_str());
|
||||
|
||||
owners_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), num_of_shmem_elem, 1, 1);
|
||||
users_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), num_of_shmem_elem, 0, 0);
|
||||
owners_queue = createSharedRingQueue(valid_shmem_path.c_str(), num_of_shmem_elem, 1, 1);
|
||||
users_queue = createSharedRingQueue(valid_shmem_path.c_str(), num_of_shmem_elem, 0, 0);
|
||||
}
|
||||
|
||||
~SharedRingQueueTest()
|
||||
@@ -194,7 +190,7 @@ TEST_F(SharedRingQueueTest, write_read_pop_over_multiple_segments)
|
||||
}
|
||||
|
||||
vector<char> no_more_space_data(SHARED_MEMORY_SEGMENT_ENTRY_SIZE*2, '6');
|
||||
EXPECT_EQ(pushToQueue(users_queue, no_more_space_data.data(), no_more_space_data.size()), -1);
|
||||
EXPECT_EQ(pushToQueue(users_queue, no_more_space_data.data(), no_more_space_data.size()), -3);
|
||||
|
||||
const char *read_data = nullptr;
|
||||
uint16_t read_bytes = 0;
|
||||
@@ -217,7 +213,7 @@ TEST_F(SharedRingQueueTest, write_element_that_fills_the_entire_queue)
|
||||
vector<char> long_data(SHARED_MEMORY_SEGMENT_ENTRY_SIZE*(num_of_shmem_elem - 1), '2');
|
||||
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), 0);
|
||||
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), -1);
|
||||
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), -3);
|
||||
|
||||
const char *data_to_read = nullptr;
|
||||
uint16_t read_bytes = 0;
|
||||
@@ -225,7 +221,7 @@ TEST_F(SharedRingQueueTest, write_element_that_fills_the_entire_queue)
|
||||
EXPECT_EQ(read_bytes, long_data.size());
|
||||
EXPECT_EQ(popFromQueue(owners_queue), 0);
|
||||
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -1);
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -3);
|
||||
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), 0);
|
||||
|
||||
EXPECT_EQ(peekToQueue(owners_queue, &data_to_read, &read_bytes), 0);
|
||||
@@ -244,11 +240,11 @@ TEST_F(SharedRingQueueTest, not_enought_space_to_push_on_end_but_enought_on_star
|
||||
for (uint i = 0; i < num_of_shmem_elem - 1; i++) {
|
||||
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), 0);
|
||||
}
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -1);
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -3);
|
||||
|
||||
for (uint i = 0; i < 3; i++) {
|
||||
EXPECT_EQ(popFromQueue(owners_queue), 0);
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -1);
|
||||
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -3);
|
||||
}
|
||||
|
||||
EXPECT_EQ(popFromQueue(owners_queue), 0);
|
||||
@@ -264,7 +260,7 @@ TEST_F(SharedRingQueueTest, attempt_write_to_full_queue)
|
||||
for (uint i = 0; i < num_of_shmem_elem - 1; i ++) {
|
||||
EXPECT_EQ(pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)), 0);
|
||||
}
|
||||
EXPECT_EQ(pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)), -1);
|
||||
EXPECT_EQ(pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)), -3);
|
||||
|
||||
const char *data_to_read = nullptr;
|
||||
uint16_t read_bytes = 0;
|
||||
@@ -278,7 +274,7 @@ TEST_F(SharedRingQueueTest, attempt_write_to_full_queue)
|
||||
);
|
||||
EXPECT_EQ(
|
||||
pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)),
|
||||
-1
|
||||
-3
|
||||
);
|
||||
|
||||
int popped_items_count = 0;
|
||||
@@ -326,14 +322,12 @@ TEST_F(SharedRingQueueTest, ilegal_queue)
|
||||
ASSERT_NE(users_queue, nullptr);
|
||||
|
||||
destroySharedRingQueue(users_queue, 0, 1);
|
||||
users_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), max_num_of_data_segments + 1, 0, 0);
|
||||
users_queue = createSharedRingQueue(valid_shmem_path.c_str(), max_num_of_data_segments + 1, 0, 0);
|
||||
EXPECT_EQ(users_queue, nullptr);
|
||||
|
||||
users_queue = createSharedRingQueue(bad_shmem_path.c_str(), max_num_of_data_segments, 0, 0);
|
||||
EXPECT_EQ(users_queue, nullptr);
|
||||
|
||||
ASSERT_NE(owners_queue, nullptr);
|
||||
destroySharedRingQueue(owners_queue, 1, 1);
|
||||
owners_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), max_num_of_data_segments, 1, 1);
|
||||
owners_queue = createSharedRingQueue(valid_shmem_path.c_str(), max_num_of_data_segments, 1, 1);
|
||||
EXPECT_NE(owners_queue, nullptr);
|
||||
}
|
||||
|
Reference in New Issue
Block a user