Skip to content

Android 15上模型初始化失败 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) #5901

Open
@mamaofei1995

Description

error log | 日志或报错信息 | ログ

ncnn框架log:

ncnn0000: fopen /proc/self/auxv failed

crash堆栈:

(ncnn::DataReaderFromAndroidAsset::scan(char const*, void*) const+164) 
(ncnn::Net::load_param(ncnn::DataReader const&)+84) 
(ncnn::Net::load_param(AAssetManager*, char const*)+84)
(XXXX::init(AAssetManager*)+212)

反编译so:

int DataReaderFromAndroidAsset::scan(const char* format, void* p) const
{
    if (!d->mem)
    {
        off_t pos = AAsset_seek(d->asset, 0, SEEK_CUR);
        d->mem = (const unsigned char*)AAsset_getBuffer(d->asset);
        d->mem += pos;
    }

    int fmtlen = strlen(format);

    char* format_with_n = new char[fmtlen + 3];
    sprintf(format_with_n, "%s%%n", format);

    int nconsumed = 0;
    int nscan = sscanf((const char*)d->mem, format_with_n, p, &nconsumed); // crash位置
    d->mem += nconsumed;

    delete[] format_with_n;

    if (nconsumed == 0)
        return 0;

    AAsset_seek(d->asset, nconsumed, SEEK_CUR);

    return nscan;
}
#endif // NCNN_STRING

context | 编译/运行环境 | バックグラウンド

运行环境:Android 15
ncnn版本:20240410 56775de (https://github.com/Tencent/ncnn/releases/tag/20240410)
ps:ncnn-20231027-android 同样存在该问题

how to reproduce | 复现步骤 | 再現方法

复现难度较大,大量线上数据反馈

more | 其他 | その他

模型初始化逻辑:

    LOGD("model init start");
    int p = predictor->load_param(mgr, "xxx.ncnn.param");
    if (p != 0) {
        LOGD("load param error!!!");
        return -1;
    }
    int b = predictor->load_model(mgr, "xxx.ncnn.bin");
    if (b != 0) {
        LOGD("load bin error!!");
        return -2;
    }
    LOGD("model init end");

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions