[
https://issues.apache.org/jira/browse/IMPALA-6873?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
bharath v resolved IMPALA-6873.
-------------------------------
Resolution: Fixed
[~tarmstrong] Yes.
Fixed via:
https://github.com/apache/impala/commit/b38d9826d7ef9bc0ecff548626d30690f935e9c3#diff-7140ed1301fa7a470056719186b1d646
> Crash in Expr::GetConstVal() due to NULL dereference
> ----------------------------------------------------
>
> Key: IMPALA-6873
> URL: https://issues.apache.org/jira/browse/IMPALA-6873
> Project: IMPALA
> Issue Type: Bug
> Components: Backend
> Affects Versions: Impala 2.8.0, Impala 2.9.0
> Reporter: bharath v
> Priority: Blocker
> Labels: crash
> Fix For: Impala 2.10.0
>
>
> Log file crashing frame
> {noformat}
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGSEGV (0xb) at pc=0x000000357f88980b, pid=564763, tid=0x00007f7b0386c700
> #
> # JRE version: Java(TM) SE Runtime Environment (8.0_162-b12) (build
> 1.8.0_162-b12)
> # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.162-b12 mixed mode
> linux-amd64 compressed oops)
> # Problematic frame:
> # C [libc.so.6+0x8980b] memcpy+0x15b
> {noformat}
> Crashing stack, extracted from core dump
> {noformat}
> #10 0x00007f4d8eaadbe7 in os::print_location(outputStream*, long, bool) ()
> from /root/usr/java/latest/jre/lib/amd64/server/libjvm.so
> #11 0x00007f4d8eabcaf5 in os::print_register_info(outputStream*, void*) ()
> from /root/usr/java/latest/jre/lib/amd64/server/libjvm.so
> #12 0x00007f4d8ec595a3 in VMError::report(outputStream*) () from
> /root/usr/java/latest/jre/lib/amd64/server/libjvm.so
> #13 0x00007f4d8ec5ab2a in VMError::report_and_die() () from
> /root/usr/java/latest/jre/lib/amd64/server/libjvm.so
> #14 0x00007f4d8eabd22f in JVM_handle_linux_signal () from
> /root/usr/java/latest/jre/lib/amd64/server/libjvm.so
> #15 0x00007f4d8eab3253 in signalHandler(int, siginfo*, void*) () from
> /root/usr/java/latest/jre/lib/amd64/server/libjvm.so
> #16 <signal handler called>
> #17 0x0000003b4d089750 in memcpy () from /lib64/libc.so.6
> #18 0x0000000000845578 in impala::Expr::GetConstVal (this=0x7f430831f400,
> state=0x7f4cdc91b750, context=0xe331540, const_val=Unhandled dwarf expression
> opcode 0xf3
> ) at /usr/src/debug/impala-2.9.0-cdh5.12.2/be/src/exprs/expr.cc:577
> #19 0x00000000008909b9 in impala::ScalarFnCall::Open (this=0x7f430831e600,
> state=0x7f4cdc91b750, ctx=0xe331540,
> scope=impala_udf::FunctionContext::FRAGMENT_LOCAL)
> at
> /usr/src/debug/impala-2.9.0-cdh5.12.2/be/src/exprs/scalar-fn-call.cc:189
> #20 0x000000000084af8c in impala::ExprContext::Open (this=Unhandled dwarf
> expression opcode 0xf3
> ) at /usr/src/debug/impala-2.9.0-cdh5.12.2/be/src/exprs/expr-context.cc:70
> #21 0x0000000000ab2a3f in
> Java_org_apache_impala_service_FeSupport_NativeEvalExprsWithoutRow
> (env=0xcca31f8, caller_class=Unhandled dwarf expression opcode 0xf3
> ) at /usr/src/debug/impala-2.9.0-cdh5.12.2/be/src/service/fe-support.cc:142
> #22 0x00007f4d7b284dad in ?? ()
> #23 0x000000059cabbe18 in ?? ()
> #24 0x000000059cabfcd8 in ?? ()
> #25 0xb395702563a2136b in ?? ()
> #26 0x00000000806394b0 in ?? ()
> #27 0xb395701200000002 in ?? ()
> #28 0x000000059cab8090 in ?? ()
> #29 0x00000000802f3c08 in ?? ()
> #30 0x000000059beef118 in ?? ()
> #31 0x00007f4cdc91bf70 in ?? ()
> #32 0x00007f4d7b28033c in ?? ()
> #33 0x000000059cab8438 in ?? ()
> #34 0x000000008d567eb0 in ?? ()
> #35 0x000000059cab8588 in ?? ()
> #36 0x000000059cab8308 in ?? ()
> #37 0x000000059cab85a0 in ?? ()
> #38 0x000000059cab85d0 in ?? ()
> #39 0x0000001811aad009 in ?? ()
> #40 0x00000008ffffffff in ?? ()
> {noformat}
>
> Missing frames are from the JVM and are below (extracted from hs_err_pid file)
> {noformat}
> J 12167
> org.apache.impala.service.FeSupport.NativeEvalExprsWithoutRow([B[B)[B (0
> bytes) @ 0x00007f7bad2e1cf3 [0x00007f7bad2e1c80+0x73]
> J 12158 C1
> org.apache.impala.service.FeSupport.EvalExprWithoutRow(Lorg/apache/impala/analysis/Expr;Lorg/apache/impala/thrift/TQueryCtx;)Lorg/apache/impala/thrift/TColumnValue;
> (170 bytes) @ 0x00007f7bad307bf4 [0x00007f7bad305be0+0x2014]
> J 12206 C1
> org.apache.impala.service.FeSupport.EvalPredicate(Lorg/apache/impala/analysis/Expr;Lorg/apache/impala/thrift/TQueryCtx;)Z
> (60 bytes) @ 0x00007f7bad32daac [0x00007f7bad32d180+0x92c]
> J 12207 C1
> org.apache.impala.analysis.Analyzer.isTrueWithNullSlots(Lorg/apache/impala/analysis/Expr;)Z
> (137 bytes) @ 0x00007f7bad331c54 [0x00007f7bad32fe40+0x1e14]
> j
> org.apache.impala.planner.HdfsScanNode.computeDictionaryFilterConjuncts(Lorg/apache/impala/analysis/Analyzer;)V+135
> j
> org.apache.impala.planner.HdfsScanNode.init(Lorg/apache/impala/analysis/Analyzer;)V+22
> j
> org.apache.impala.planner.SingleNodePlanner.createHdfsScanPlan(Lorg/apache/impala/analysis/TableRef;ZLjava/util/List;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+306
> j
> org.apache.impala.planner.SingleNodePlanner.createScanNode(Lorg/apache/impala/analysis/TableRef;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+143
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefNode(Lorg/apache/impala/analysis/TableRef;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+14
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(Ljava/util/List;Ljava/util/List;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+41
> j
> org.apache.impala.planner.SingleNodePlanner.createSelectPlan(Lorg/apache/impala/analysis/SelectStmt;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+203
> j
> org.apache.impala.planner.SingleNodePlanner.createQueryPlan(Lorg/apache/impala/analysis/QueryStmt;Lorg/apache/impala/analysis/Analyzer;Z)Lorg/apache/impala/planner/PlanNode;+31
> j
> org.apache.impala.planner.SingleNodePlanner.createInlineViewPlan(Lorg/apache/impala/analysis/Analyzer;Lorg/apache/impala/analysis/InlineViewRef;)Lorg/apache/impala/planner/PlanNode;+208
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefNode(Lorg/apache/impala/analysis/TableRef;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+107
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(Ljava/util/List;Ljava/util/List;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+41
> j
> org.apache.impala.planner.SingleNodePlanner.createSelectPlan(Lorg/apache/impala/analysis/SelectStmt;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+203
> j
> org.apache.impala.planner.SingleNodePlanner.createQueryPlan(Lorg/apache/impala/analysis/QueryStmt;Lorg/apache/impala/analysis/Analyzer;Z)Lorg/apache/impala/planner/PlanNode;+31
> j
> org.apache.impala.planner.SingleNodePlanner.createUnionPlan(Lorg/apache/impala/analysis/Analyzer;Lorg/apache/impala/analysis/UnionStmt;Ljava/util/List;Lorg/apache/impala/planner/PlanNode;)Lorg/apache/impala/planner/UnionNode;+141
> j
> org.apache.impala.planner.SingleNodePlanner.createUnionPlan(Lorg/apache/impala/analysis/UnionStmt;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+164
> j
> org.apache.impala.planner.SingleNodePlanner.createQueryPlan(Lorg/apache/impala/analysis/QueryStmt;Lorg/apache/impala/analysis/Analyzer;Z)Lorg/apache/impala/planner/PlanNode;+144
> j
> org.apache.impala.planner.SingleNodePlanner.createInlineViewPlan(Lorg/apache/impala/analysis/Analyzer;Lorg/apache/impala/analysis/InlineViewRef;)Lorg/apache/impala/planner/PlanNode;+208
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefNode(Lorg/apache/impala/analysis/TableRef;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+107
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(Ljava/util/List;Ljava/util/List;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+41
> j
> org.apache.impala.planner.SingleNodePlanner.createSelectPlan(Lorg/apache/impala/analysis/SelectStmt;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+203
> j
> org.apache.impala.planner.SingleNodePlanner.createQueryPlan(Lorg/apache/impala/analysis/QueryStmt;Lorg/apache/impala/analysis/Analyzer;Z)Lorg/apache/impala/planner/PlanNode;+31
> j
> org.apache.impala.planner.SingleNodePlanner.createInlineViewPlan(Lorg/apache/impala/analysis/Analyzer;Lorg/apache/impala/analysis/InlineViewRef;)Lorg/apache/impala/planner/PlanNode;+208
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefNode(Lorg/apache/impala/analysis/TableRef;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+107
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(Ljava/util/List;Ljava/util/List;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+41
> j
> org.apache.impala.planner.SingleNodePlanner.createSelectPlan(Lorg/apache/impala/analysis/SelectStmt;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+203
> j
> org.apache.impala.planner.SingleNodePlanner.createQueryPlan(Lorg/apache/impala/analysis/QueryStmt;Lorg/apache/impala/analysis/Analyzer;Z)Lorg/apache/impala/planner/PlanNode;+31
> j
> org.apache.impala.planner.SingleNodePlanner.createInlineViewPlan(Lorg/apache/impala/analysis/Analyzer;Lorg/apache/impala/analysis/InlineViewRef;)Lorg/apache/impala/planner/PlanNode;+208
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefNode(Lorg/apache/impala/analysis/TableRef;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+107
> j
> org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(Ljava/util/List;Ljava/util/List;ZLorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+41
> j
> org.apache.impala.planner.SingleNodePlanner.createSelectPlan(Lorg/apache/impala/analysis/SelectStmt;Lorg/apache/impala/analysis/Analyzer;)Lorg/apache/impala/planner/PlanNode;+203
> j
> org.apache.impala.planner.SingleNodePlanner.createQueryPlan(Lorg/apache/impala/analysis/QueryStmt;Lorg/apache/impala/analysis/Analyzer;Z)Lorg/apache/impala/planner/PlanNode;+31
> j
> org.apache.impala.planner.SingleNodePlanner.createSingleNodePlan()Lorg/apache/impala/planner/PlanNode;+104
> j org.apache.impala.planner.Planner.createPlan()Ljava/util/ArrayList;+25
> j
> org.apache.impala.service.Frontend.createExecRequest(Lorg/apache/impala/planner/Planner;Ljava/lang/StringBuilder;)Lorg/apache/impala/thrift/TQueryExecRequest;+111
> J 12874 C1
> org.apache.impala.service.Frontend.createExecRequest(Lorg/apache/impala/thrift/TQueryCtx;Ljava/lang/StringBuilder;)Lorg/apache/impala/thrift/TExecRequest;
> (956 bytes) @ 0x00007f7bad587174 [0x00007f7bad583780+0x39f4]
> J 13160 C1 org.apache.impala.service.JniFrontend.createExecRequest([B)[B (100
> bytes) @ 0x00007f7bad687d7c [0x00007f7bad687760+0x61c]
> {noformat}
> So the root cause seems to be in the {{memcpy()}} in the following piece of
> code in expr.cc
> {noformat}
> case TYPE_VARCHAR: {
> StringVal* sv = reinterpret_cast<StringVal*>(*const_val);
> *sv = GetStringVal(context, NULL);
> if (sv->len > 0) {
> // Make sure the memory is owned by 'context'.
> uint8_t* ptr_copy = context->pool_->TryAllocate(sv->len);
> if (ptr_copy == NULL) {
> return context->pool_->mem_tracker()->MemLimitExceeded(
> state, "Could not allocate constant string value", sv->len);
> }
> memcpy(ptr_copy, sv->ptr, sv->len); <--- CRASH since sv->ptr = NULL
> an sv->len > 0
> sv->ptr = ptr_copy;
> }
> break;
> }
> {noformat}
> Few observations:
> - The query crashes the coordinator during the query compilation/analysis
> (as evident from the JVM stack trace)
> - The root cause seems to be due to a malformed {{StringVal}} (ptr = NULL
> and len >0) returned by {{GetStringVal}} and it is unclear at this point
> which specific function/piece of code is generating that.
> - In this particular case, I figured that the ScalarFn in the crashing stack
> that is calling {{GetConstVal}} is {{concat()}} and removing it doesn't crash
> the coordinator.
> - Unable to reproduce it locally on my dev box
> - The problematic piece of code memcpy'ing the NULL ptr is introduced by
> IMPALA-4302 and removed by IMPALA-4192. Hence only 2.9.0 and 2.10.0 are the
> affected versions
> Next Steps:
> - Avoid the crash by having a stricter is_null check on the output StringVal
> - Figure out which possible builtins can generate such StringVals.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)