互斥元如何泄漏受保护数据

如果受保护的数据的指针或引用,被任意函数返回,或者将受保护的数据传至到互斥元之外的函数,在外部储存。这样的话任意函数都可以对其访问(可能对其修改)。

代码如下:

class some_data 
{
    int a;
    string a;
public:
    void do_something();
};

class data_wrapper
{
private:
    some_data data;
    mutex m;
public:
    template<typename Function>
    void process_data(Function func) 
    {
        lock_guard<mutex> l(m);
        func(data); //将受保护的数据传递给互斥元范围
    }
};

some_data* unprotected;

void malicious_function(some_data & protected_data) 
{
    unprotected->do_something();
}
data_wrapper x;

int main() 
{
    x.process_data(malicious_function); //恶意传值
    unprotected->do_something(); //对受到保护的对象进行访问
    system("pause");
    return 0;
}

不要将对受保护数据的指针和引用传递锁的范围之外,无论是通过函数返回它们,将其存放在外部可见的内存中,还是作为参数传递给其他的函数。

上一篇:Linux 嵌入式开发学习day6:数据库操作图文详解


下一篇:力扣刷题Day6 --- 12.整数转罗马数字 (贪心算法)